PyQt3 to biblioteka pythona dla biblioteki QT Trolltechu. Na QT oparte jest KDE oraz spora liczba niezależnych aplikacji (qtparted, dc-qt, qtella i inne). Zaletą pyQT czy też samego QT jest QTdesigner - narzędzie do rysowania graficznych interfejsów jak i kodowania całej aplikacji. QT to C++ i pisanie aplikacji w czystym QT łatwe raczej nie jest, natomiast pyQT zmienia poziom trudności na bardzo łatwy.
Stworzymy teraz prostą aplikację wyświetlającą dane o procesorze (z /proc/cpuinfo). Pierwszy etap to pobranie dokumentacji (np. za pomocą httrack) widgetów QT ze strony trolltechu. Potrzebujemy wszystko z "all widgets"
Następny etap to instalacja pyQT. W każdej dystrybucji pakiet ten powinien być dostępny, czasami może być połączony z pyKDE. Gdy już mamy pyQT to uruchamiamy QT Designera (powinien być z QT, ew. QT-devel, nazwa: "designer") Pojawi się okno startowe:
Wybieramy "Dialog". Pojawi się puste okno bez widgetów:
Z menu po lewej wybieramy typ widgetu, który chcemy narysować w oknie. Zaznaczamy "Push Button" i rysujemy 2 widgety tego typu. Z zakładki "Display" rysujemy jeden "TextBrowser" by otrzymać:
Kliknij dwa razy na dany przycisk (Push Button) by edytować jego tekst (Caption) Wpisz dla jednego "Wyjdź" dla drugiego "Wczytaj". Zaznacz całe okno i w menu po prawej opisującym widget znajdź pole "Caption" i wpisz "Centrum Informacyjne Procesora"
W efekcie powinniśmy otrzymać:
By nasz widget działał wszystkie elementy muszą wysyłać jakieś sygnały, które muszą wywoływać zdarzenia. Widgety potrafią wysyłać sygnały jak "kliknięty" lecz zdarzenia to już nasza kwestia. Zaznacz z poziomej belki ikonę "Connect Singal and Slots" (z czerwoną strzałką)
Następnie wciśnij przycisk myszy nad Przyciskiem "wyjdź" i wciśnięty przeciągnij nad formularz tak by cały został podświetlony na różowo. Puść przycisk - właśnie stworzyłeś połączenie sygnał-zdarzenie.
Pojawi się okno zarządzające sygnałami-zdarzeniami. Przycisk "Wyjdź" ma zamykać aplikację. Zdarzenie "zamknij aplikację" jest dostępne w QT jako slot "close()". Po ustawienia wpisu nasz pierwszy przycisk będzie działał (w gotowej aplikacji). Drugi przycisk będzie miał za zadanie wykonanie zdarzenia niedostępnego w QT.
Z menu "Edit" wybierz "Slots" i dodaj nową funkcję i ustaw jej nazwę na "czytaj", reszty zmieniać nie trzeba. Następnie tworzymy nowy sygnał-zdarzenie od przycisku "Wczytaj" do formularza (podobnie jak w pierwszym przypadku) gdzie jako zdarzenie (slot) wybieramy naszą funkcję:
Teraz musimy napisać kod dla naszej funkcji. Kliknij dwa razy na formularz i wyraź zgodę na stworzenie "form1.ui.h". Pojawi się edytor tekstowy, w którym będziemy mogli wpisać kod - kod pythona a nie c++ :) Kod wygląda następująco
Początek to wczytanie pliku, przedostatni wiersz - self.textBrowser1.setText(tekst) to już pyQT. Nasz widget TextBrowser ma nazwę (label) domyślną "textBrowser1"
setText(napis) to metoda tego widgeta, opisana w dokumentacji QT - metody tam opisane przekładają się bezpośrednio na te w PyQT. Podsumowując po wciśnięciu przycisku "Wczytaj" wykona się podany kod. Zapisujemy naszą aplikację jako form1. Teraz z konsoli przetwarzamy kod QTDesignera na Pythona:
pyuic form1.ui > form1.py
W tym samym katalogu tworzymy plik start.py o kodzie:
Comment article