RkBlog

Hardware, programming and astronomy tutorials and reviews.

Wprowadzenie do PyQt4

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, Piotr Mali艅ski

Comment article