RkBlog

Hardware, programming and astronomy tutorials and reviews.

Wprowadzenie do PyQt4

Podstawowe elementy i zasady działania biblioteki PyQt4, wymagania i instalacja biblioteki

Wprowadzenie

PyQt4 to Pythonowe API dla przenośnego frameworka interfejsów graficznych Qt4 działającego pod Linuksem, systemami Unixowymi, Mac OS X i MS Windows. PyQt4 dostępne jest na dwóch licencjach w zależności od zastosowań. Dla projektów o otwartym źródle dostępna jest na licencji GPL2, oraz dla projektów komercyjnych na licencji komercyjnej.

Wymagania i instalacja

W przypadku dystrybucji Linuksa, systemów BSD pakiet PyQt4 powinien znajdować się w repozytorium - wystarczy zainstalować pakiet (i automatycznie wszystkie jego zależności). W przypadku MS Windows dostępny jest instalator PyQt4 zawierający wszystko co potrzebne poza samym Pythonem. Poniżej znajduje się krótki opis biblioteki.

Moduły PyQt4

- QtCore: zawiera podstawowe klasy odpowiedzialne m.in. za mechanizm slotów i sygnałów, abstrakcję Unikodu, wyrażeń regularnych czy wątków
- QtGui: zawiera większość klas GUI
- QtWebKit: zawiera silnik renderujący strony internetowe WebKit i widżety/klasy do jego wykorzystania
- QtNetwork: zawiera klasy dla serwerów i klientów TCP i UDP. Zawiera implementację klientów FTP, HTTP, wspiera wyszukiwanie DNSów
- QtOpenGL: zawiera implementację OpenGL do wyświetlania grafiki 3D
- QtSql: zawiera klasy zapewniające obsługę baz danych. Zawiera również implementację SQLite
- QtSvg: odpowiada za wyświetlanie zawartości plików SVG
- QtXml: moduł zawierający implementację interfejsu SAX i DOM
- QtAssistant: moduł zawierający klasy umożliwiające integrowanie Qt Assistant z aplikacją PyQt
- Qt: konsoliduje wszystkie podane wyżej moduły. W przypadku ładowania modułu Qt należy pamiętać że spowoduje to załadowanie całego frameworka PyQt4
- uic: zawiera klasy odpowiedzialne za parsowanie plików *ui generowanych przez QT Designtera i zawierających informacje o GUI.
- pyqtconfig: rozszerzenie SIP, ułatwia konfigurowanie aplikacji/Qt

Sygnały i Sloty

Charakterystyczną cechą Qt jest mechanizm sygnałów i slotów będący sposobem porozumiewania się elementów aplikacji. Sygnał emitowany jest w przypadku wystąpienia określonej akcji (np. przyciśnięto przycisk). Slot to funkcja połączona (za pomocą QtCore.QObject.connect()) z określonym sygnałem i jest wykonywana gdy taki sygnał zostanie wyemitowany.
- sygnał może być połączony z wieloma slotami
- sygnał może być połączony z innym sygnałem
- slot może być połączony z wieloma sygnałami
- w PyQt sygnały są emitowane przez metodę QtCore.QObject.emit()
- połączenia mogą być bezpośrednie - synchroniczne lub kolejkowane - asynchroniczne
- można tworzyć połączenia między wątkami
- sygnały są rozłączane za pomocą metody QtCore.QObject.disconnect()

Łączenie sygnałów ze slotami

Łączenie sygnałów ze slotami wykonuje się za pomocą metody QtCore.QObject.connect():
QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), pyFunction)
QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), pyClass.pyMethod)
QtCore.QObject.connect(a, QtCore.SIGNAL("QtSig()"), QtCore.SLOT("QtSlot()"))
QtCore.QObject.connect(a, QtCore.SIGNAL("PySig()"), QtCore.SLOT("QtSlot()"))
QtCore.QObject.connect(a, QtCore.SIGNAL("PySig"), pyFunction)
Rozłączanie działa na takiej samej zasadzie, z tym że używa się QtCore.QObject.disconnect() a sygnały muszą być rozłączane pojedynczo.

Emitowanie sygnałów

Każda instancja klas pochodnych względem QtCore.QObject może wyemitować sygnał za pomocą metody emit(). Przyjmuje minimum 1 argument - sygnał. Pozostałe argumenty przekazywane są jako argumenty syngału:
a.emit(QtCore.SIGNAL("clicked()"))
a.emit(QtCore.SIGNAL("pySig"), "Hello", "World")


Używanie Qt Designera

Qt Designer to aplikacja umożliwiająca tworzenie interfejsu graficznego aplikacji w wizualny sposób. Aplikacja ta tworzy pliki .ui zawierające kod XML opisujący stworzony interfejs. PyQt4 zawiera pythonowy moduł uic umożliwiający generowanie kodu Pythona na bazie pliku .ui lub też dynamiczne ładowanie takiego pliku i tworzenie GUI w locie. Metoda loadUi(uifile, baseinstance=None) ładuje plik .ui i zwraca instancję interfejsu, gdzie "uifile" to nazwa pliku *.ui lub obiekt "plikopodobny". Z linii komend dostępne jest narzędzie pyuic4 będące nakładką na uic.
RkBlog

PyQt, 14 July 2008,

Comment article