Kurs Pythona dla testerów oprogramowania. Część 3. Biblioteka PyQt4.

W ostatniej części kursu zainstalowaliśmy Pythona. Jednak, aby zrobić nasz generator potrzebna nam jest również biblioteka PyQt4.

Jest ona Pythonowym 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

  • SIP, czyli protokół inicjowania sesji
  • Qt 4
  • Python 2.X lub 3.X

W przypadku praktycznie każdej dystrybucji Linuksa, 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.

 

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.

 

Sygnały i sloty

Charakterystyczną cechą QT jest  mechanizm sygnałów i slotów będących 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. Warto również dodać, że:

  • 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 kolejkowanie – 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 tą różnicą, że używa 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 sygnału:

  • a.emit(QtCore.SIGNAL("clicked()"))
  • a.emit(QtCore.SIGNAL("pySig"), "Hello", "World")

 

Używanie Qt Designera

W związku z tym, że tworzenie interfejsów bywa uciążliwe, można użyć np.: QtDesignera. Jest to środowisko proste i przejrzyste. Dzięki niemu możemy w łatwy i szybki sposób stworzyć wymarzony widget przez zwykłe "wyklinanie".  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.

Po zainstalowaniu i otwarciu QtDesignera wygląda to następująco:

 

 

Wszelkie potrzebne informacje nt. Qt znajdziecie tutaj: http://doc.qt.io/qt-5/qtdesigner-manual.html. Strona w dosyć przystępny sposób przedstawia możliwości tego kreatora.

 

To tyle odnośnie samej biblioteki. W następnej części zajmiemy już jej praktycznym wykorzystaniem.

 

Bibliografia:

1. http://www.python.rk.edu.pl/w/p/wprowadzenie-do-pyqt4/

 
 
Autor: Iwona Rabus - praktykant w testerzy.pl.
 
 
 
SPRAWDŹ TAKŻE
Kurs Pythona dla testerów oprogramowania. Część 5. Obiektowe aspekty Pythona. 
Kurs Pythona dla testerów oprogramowania. Część 4. Generator danych - analiza aplikacji. 
Kurs Pythona dla testerów oprogramowania. Część 2. Instalacja. 
Kurs Pythona dla testerów oprogramowania. Część 1. Wprowadzenie. 

 

 

Najbliższe terminy szkoleń

 

23-26 września - Rzeszów

Zawód Tester


26-27 września - Warszawa

Od Testera do Managera


30 września-3 października - Warszawa

Zawód Tester

 

Partnerzy

Narzędzia testerskie