Tutorial PyQt5 cu exemple: Proiectați GUI folosind PyQt în Python
Ce este PyQt?
PyQt este o legare python a setului de instrumente widget cu sursă deschisă Qt, care funcționează și ca un cadru de dezvoltare a aplicațiilor multiplatformă. Qt este popular C++ cadru pentru scrierea aplicațiilor GUI pentru toate platformele desktop, mobile și încorporate majore (suporta Linux, Windows, MacOS, Android, iOS, Raspberry Pi și multe altele).
PyQt este un software gratuit dezvoltat și întreținut de Riverbank Computing, o companie cu sediul în Anglia, în timp ce Qt este dezvoltat de o firmă finlandeză numită The Qt Company.
Caracteristicile PyQT
Iată caracteristicile importante ale PyQt:
Aflați PyQt, care constă din peste șase sute de clase care acoperă o gamă largă de caracteristici, cum ar fi
- Interfețe grafice de utilizator
- Baze de date SQL
- Truse de instrumente web
- procesare XML
- Rețele
Aceste caracteristici pot fi combinate pentru a crea interfețe de utilizare avansate, precum și aplicații independente. O mulțime de companii importante din toate industriile folosesc Qt. Câteva exemple sunt LG, Mercedes, AMD, Panasonic, Harman etc.
Versiuni PyQt
PyQt este disponibil în două ediții, PyQt4 și PyQt5. PyQt4 oferă cod lipici pentru legarea versiunilor 4.x și 5.x ale cadrului Qt, în timp ce PyQt5 oferă o legare numai pentru versiunile 5.x. Ca urmare, PyQt5 nu este compatibil cu modulele depreciate ale versiunii mai vechi. În acest tutorial Qt GUI, PyQt5 va fi folosit pentru demonstrarea exemplelor. În afară de aceste două versiuni,
Riverbank Computing oferă, de asemenea, PyQt3D—legăturile python pentru cadrul Qt3D. Qt3D este un cadru de aplicație folosit pentru a crea sisteme de simulare în timp real cu randare 2D/3D.
Cum se instalează PyQt5
În acest tutorial PyQt5, vom vedea cele două moduri de instalare a PyQt:
- Utilizarea fișierelor Wheel
- Construirea și instalarea din sursă
Qt (pronunțat drăguț) este un sistem complex, iar baza de cod PyQt conține compilate C++ si Python cod sub capotă. Ca rezultat, este un proces complicat să îl construiți și să îl instalați din sursă în comparație cu alte biblioteci Python. Cu toate acestea, puteți instala cu ușurință PyQt5 folosind roți.
Instalare cu roti
Roțile sunt noul standard Python format de ambalare și distribuție. Pur și simplu vorbind, o roată este o arhivă ZIP cu un nume special și .whl extensia de fișier. Roțile pot fi instalate folosind pip (Pythonmanagerul de pachete al lui), care este inclus implicit în versiunile recente ale Python.
Deci, dacă ai Python 3.4 sau o versiune ulterioară instalată, aveți deja pip. Dacă, totuși, utilizați o versiune mai veche a Python, trebuie să descărcați și să instalați pip înainte de a merge mai departe. Puteți căuta instrucțiuni pentru asta la acest link: https://pypi.org/project/pip/.
Pentru a instala PyQt5,
Pas 1) Deschideți promptul de comandă.
Deschideți promptul de comandă sau PowerShell în dvs Windows mașină.
Pas 2) Introduceți următoarele.
pip install PyQt5
Pas 3) Instalare reusita.
Acest pas din acest tutorial PyQt5 va descărca pachetul PyQt5 whl (aproximativ 50 MB) și îl va instala pe sistemul dumneavoastră.
Alternativ, puteți descărca și un Windows binar pentru versiunea de python instalată pe computer.
După ce este finalizat, treceți la următoarea secțiune din acest tutorial PyQt5 pentru a scrie prima aplicație GUI.
PyQt de bază Concepts și Programe
Acum că ați instalat cu succes PyQt5 în computer, sunteți gata să scrieți Python Aplicații de proiectare GUI.
Să începem cu o aplicație simplă în acest tutorial PyQt5, care va afișa o fereastră goală pe ecran.
Aprinde-ți pitonul IDLE și introduceți următoarele:
programul 1
import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle("Guru99") w.show() sys.exit(app.exec_())
Salvați-l ca app.py (numele nu contează) și apăsați F5 pentru a rula programul. Alternativ, faceți dublu clic pe fișierul salvat pentru a lansa aplicația. Dacă ați făcut totul corect, se va deschide o nouă fereastră cu titlul Guru99, așa cum se arată mai jos.
Grozav! Functioneaza. Nu este mult, dar este suficient pentru a înțelege elementele de bază. Acum, în acest tutorial PyQt, să vedem în detaliu ce face fiecare dintre liniile din programul dumneavoastră.
from PyQt5.QtWidgets import QApplication, QWidget
Această instrucțiune importă toate modulele de care aveți nevoie pentru a crea o GUI în spațiul de nume curent. Modulul QtWidgets conține toate widget-urile majore pe care le veți folosi în acest sens Python Tutorial Qt.
app = QApplication(sys.argv)
Aici, creați un obiect din clasa QApplication. Acest pas este o necesitate pentru PyQt5; fiecare aplicație UI trebuie să creeze o instanță a QApplication, ca un fel de punct de intrare în aplicație. Dacă nu îl creați, vor fi afișate erori.
sys.argv este lista de parametri de linie de comandă pe care îi puteți transmite aplicației atunci când o lansați prin shell sau în timp ce automatizați interfața.
În acest exemplu PyQt5, nu ați transmis niciun argument către QApplications. Prin urmare, îl puteți înlocui și cu codul de mai jos și nici măcar nu trebuie să importați modulul sys.
app = QApplication([])
w = QWidget()
În continuare, facem un obiect din clasa QWidget. QWidget este clasa de bază a tuturor obiectelor UI din Qt și practic tot ceea ce vedeți într-o aplicație este un widget. Aceasta include dialoguri, texte, butoane, bare și așa mai departe. Caracteristica care vă permite să proiectați interfețe de utilizator complexe este aceea că widget-urile pot fi imbricate, adică puteți avea un widget în interiorul unui widget, care se află în interiorul unui alt widget. Veți vedea acest lucru în acțiune în secțiunea următoare.
w.resize(300,300)
Metoda de redimensionare a clasei QWidget vă permite să setați dimensiunile oricărui widget. În acest caz, ați redimensionat fereastra la 300px pe 300px.
Aici, ar trebui să vă amintiți că widget-urile pot fi imbricate împreună, widget-ul cel mai exterior (adică widget-ul fără părinte) se numește fereastră.
w.setWindowTitle("Guru99")
Metoda setWindowTitle() vă permite să treceți un șir ca argument care va seta titlul ferestrei la șirul pe care îl treceți. În exemplul PyQt5, bara de titlu va afișa Guru99.
w.show()
show() afișează pur și simplu widget-ul pe ecranul monitorului.
sys.exit(app.exec_())
Metoda app.exec_() pornește Qt/C++ bucla de eveniment. După cum știți, PyQt este în mare parte scris C++ și utilizează mecanismul buclei de evenimente pentru a implementa execuția paralelă. app.exec_() transmite controlul către Qt, care va ieși din aplicație numai atunci când utilizatorul o închide din GUI. De aceea ctrl+c nu va ieși din aplicație ca în alte programe Python. Deoarece Qt deține controlul asupra aplicației, evenimentele Python nu sunt procesate decât dacă le setăm în cadrul aplicației. De asemenea, rețineți că metoda exec are o liniuță de subliniere în numele ei; acest lucru se datorează faptului că exec() era deja un cuvânt cheie în python și liniuța de subliniere rezolvă conflictul de denumire.
Dincolo de ferestre goale
În secțiunea anterioară, ați văzut cum să creați un widget de bază în Qt. Acum este timpul să facem niște interfețe mai implicate cu care utilizatorii să poată interacționa cu adevărat. Din nou, dă foc IDLE si scrie urmatoarele.
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox def dialog(): mbox = QMessageBox() mbox.setText("Your allegiance has been noted") mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru") mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) mbox.exec_() if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle("Guru99") label = QLabel(w) label.setText("Behold the Guru, Guru99") label.move(100,130) label.show() btn = QPushButton(w) btn.setText('Beheld') btn.move(110,150) btn.show() btn.clicked.connect(dialog) w.show() sys.exit(app.exec_())
Salvați fișierul ca appone.py sau orice doriți și apăsați F5 pentru a rula programul. Dacă nu ați făcut nicio greșeală, IDLE se va deschide o fereastră nouă cu ceva text și un buton, așa cum se arată mai jos.
- După ce faceți clic pe butonul din prima fereastră, se va deschide o nouă casetă de mesaj cu textul pe care l-ați scris.
- Acum puteți face clic pe butonul Ascundere detalii/Afișare detalii pentru a comuta vizibilitatea textului suplimentar.
După cum puteți vedea, deoarece nu am setat niciun titlu de fereastră în caseta de mesaj, un titlu implicit a fost furnizat de python însuși.
Acum că funcționează, să aruncăm o privire la codul suplimentar pe care l-ați adăugat la exemplul anterior PyQt5.
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
Acest lucru importă mai multe widget-uri pe care le-ați folosit în exemplele PyQt5, și anume QLabel, QPushButton și QMessageBox.
def dialog(): mbox = QMessageBox() mbox.setText("Your allegiance has been noted") mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru") mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) mbox.exec_()
Aici, ați definit o metodă numită dialog care creează un widget cu casetă de mesaj și setează un text la butoane și alte câmpuri.
Metoda dialogului este apelată din blocul principal al programului atunci când un buton este apăsat într-un anumit widget (în acest caz, PushButton btn). Evenimentul de clic declanșat pe acel buton determină executarea acestei funcție. O astfel de funcție se numește slot în Qt și veți afla mai multe despre semnalele si sloturi în paragrafele următoare.
if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle("Guru99")
Aceasta este secțiunea principală a aplicației și, ca în exemplul anterior, începeți prin a crea o instanță a QApplication urmată de un widget simplu, adică o instanță a QWidget.
label = QLabel(w) btn = QPushButton(w)
Ați adăugat două widget-uri noi în această aplicație: QLabel și QPushButton. QLabel este folosit pentru a imprima text needitabil sau substituenți în interiorul unui widget, în timp ce QPushButton este folosit pentru a crea un buton pe care se poate face clic.
Lucrul critic de observat aici este că atunci când creați obiectele label și btn, treceți obiectul fereastră (w) constructorilor QLabel și QPushButton. Așa funcționează imbricarea în PyQt5. Pentru a crea un widget în interiorul altui widget, treceți referința widget-ului părinte constructorului copilului.
label.move(100,130) btn.move(110,150)
move() este folosit pentru a seta poziția unui widget față de widget-ul părinte. În primul caz, eticheta va fi mutată 100px din stânga și 130px din partea de sus a ferestrei.
În mod similar, butonul va fi plasat la 110px din stânga și 150px din partea de sus a ferestrei. Acest exemplu este o modalitate brută de a realiza machete și, în general, nu este utilizat în producție; este inclus aici doar în scopuri de învățare. Qt acceptă diferite aspecte pe care le veți vedea în detaliu în secțiunile următoare ale acestui tutorial PyQt.
btn.clicked.connect(dialog)
În cele din urmă, acesta este un exemplu de semnale și sloturi în Qt. În aplicațiile bazate pe GUI, funcțiile sunt executate pe baza acțiunilor efectuate de utilizator, cum ar fi trecerea cu mouse-ul peste un element sau făcând clic pe un buton. Aceste acțiuni sunt numite evenimente. Amintiți-vă că metoda app.exec_() transferă controlul către Qt eveniment-buclă. Pentru asta se folosește bucla de evenimente: pentru a asculta evenimente și pentru a efectua acțiuni ca răspuns.
Ori de câte ori are loc un eveniment, cum ar fi un utilizator care dă clic pe un buton, widgetul Qt corespunzător ridică a semnal. Aceste semnale pot fi conectate funcții python (ca și funcția de dialog din acest exemplu), astfel încât funcția să fie executată atunci când este declanșat un semnal. Aceste funcții sunt numite sloturi în limbajul Qt.
Ulterior, sintaxa de bază pentru a declanșa o funcție de slot ca răspuns la semnalul de la un eveniment este următoarea
widget.signal.connect(slot)
Ceea ce înseamnă că ori de câte ori a semnal este declanșată de a widget, conectat slot funcția va fi executată. Pe scurt, semnalele și sloturile sunt folosite de Qt pentru a comunica între obiecte și pentru a facilita reutilizarea și interactivitatea componentelor.
Acum că știți cum să imbricați widget-uri și să implementați interacțiuni folosind semnale și sloturi, iată o listă de widget-uri utile și alte clase pe care le puteți utiliza în aplicațiile dvs. PyQt.
Componente și widget-uri
Există un număr mare de widget-uri disponibile în PyQt pentru a crea aplicații GUI. Cu toate acestea, cu PyQt5, a existat o remaniere a claselor în diferite module și revizuiri ale licențelor.
Prin urmare, este crucial să aveți o vedere la nivel înalt a structurii lui PyQt5. În această secțiune, veți vedea cum PyQt5 este organizat intern și veți afla despre diferitele module, biblioteci și clase API furnizate de PyQt5.
Structura directorului PyQt5
Acestea sunt modulele fundamentale folosite de PythonLegarea lui Qt, în special PyQt5.
- Qt: Combină toate clasele/modulele menționate mai jos într-un singur modul. Mărește considerabil memoria folosită de aplicație. Cu toate acestea, este mai ușor să gestionați cadrul prin importul unui singur modul.
- QtCore: Conține clasele principale non-grafice utilizate de alte module. Aici sunt implementate bucla de evenimente Qt, semnalele și conectivitatea sloturilor etc.
- QtWidgets: Conține majoritatea widget-urilor disponibile în Pyqt5.
- QtGui: Conține componente GUI și extinde modulul QtCore.
- QtNetwork: Conține clase folosite pentru a implementa programarea în rețea prin Qt. Acesta acceptă servere TCP, socket-uri TCP, socket-uri UDP, manipulare SSL, sesiuni de rețea și căutări DNS.
- QtMultimedia oferă funcționalitate multimedia de nivel scăzut.
- QtSql: implementează integrarea bazelor de date pentru bazele de date SQL. Suporta ODBC, MySQL, Oracle, SQLite și PostgreSQL.
Widgeturi PyQt5
Iată o listă cu cele mai frecvent utilizate widget-uri în PyQt5
- QLineEdit: Acesta este un câmp de introducere care permite utilizatorului introducerea unui rând de text.
line = QLineEdit()
- QRadioButton: Acesta este un câmp de introducere cu un buton selectabil, similar butoanelor radio din html.
rad = QRadioButton("button title") rad.setChecked(True) #to select the button by default.
- QComboBox: este folosit pentru a afișa un meniu derulant cu o listă de elemente selectabile.
drop = QComboBox(w) drop.addItems(["item one", "item two", "item three"])
- QCheckBox: Afișează o casetă pătrată selectabilă în fața etichetei care este bifată dacă este selectată, similar butoanelor radio.
check = QCheckBox("button title")
- QMenuBar: afișează o bară de meniu orizontală în partea de sus a ferestrei. Puteți adăuga doar obiecte din clasa QMenu la această bară. Aceste obiecte QMenu pot conține șiruri de caractere, obiecte QAction sau alte obiecte QMenu.
- QToolBar: este o bară orizontală sau un panou care poate fi mutat în interiorul ferestrei. Poate conține butoane și alte widget-uri.
- QTab: este folosit pentru a descompune conținutul unei ferestre în mai multe pagini care pot fi accesate prin diferite file din partea de sus a widget-ului. Este format din două secțiuni: bara de file și pagina de file.
- QScrollBar: este folosit pentru a crea bare de defilare care permit utilizatorului să defileze în sus și în jos într-o fereastră. Acesta constă dintr-un glisor mobil, o pistă de glisare și două butoane pentru a derula glisorul în sus sau în jos.
scroll = QScrollBar()
- QSplitter: Splitterele sunt folosite pentru a separa conținutul unei ferestre, astfel încât widget-urile să fie grupate corect și să nu pară aglomerate. QSplitter este unul dintre principalii gestionari de aspect disponibile în PyQt5 și este folosit pentru a împărți conținutul atât pe orizontală, cât și pe verticală.
- QDock: Un widget de andocare este o sub fereastră cu două proprietăți:
- Poate fi mutat în fereastra principală și
- Poate fi andocat în afara ferestrei părinte în altă locație de pe ecran.
Aspecte și teme
În exemplele PyQt5 anterioare, ați folosit doar metodele move() și resize() pentru a seta pozițiile widget-urilor în GUI.
Cu toate acestea, PyQt are un motor robust de gestionare a aspectului care poate fi folosit pentru a crea interfețe avansate de utilizator pentru aplicații. În această secțiune, veți afla despre două clase importante care sunt utilizate în Qt pentru a crea și gestiona machete.
- QBoxAspect
- QGridLayout
QBoxAspect
QBoxLayout este folosit pentru a alinia widget-urile secundare ale aspectului într-un rând orizontal sau vertical. Cele două clase de interese care moștenesc de la QBoxAspectul sunt:
- QHBoxAspect: folosit pentru a alinia orizontal widget-urile copil.
- QVBoxAspect: folosit pentru a alinia vertical widget-urile secundare.
De exemplu, așa sunt trei butoane aliniate cu QHBoxAspectul va arăta.
import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() w.setWindowTitle("Musketeers") btn1 = QPushButton("Athos") btn2 = QPushButton("Porthos") btn3 = QPushButton("Aramis") hbox = QHBoxLayout(w) hbox.addWidget(btn1) hbox.addWidget(btn2) hbox.addWidget(btn3) w.show() sys.exit(app.exec_())
Și așa vor arăta în QVBoxAspect.
import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() w.setWindowTitle("Musketeers") btn1 = QPushButton("Athos") btn2 = QPushButton("Porthos") btn3 = QPushButton("Aramis") vb = QVBoxLayout(w) vb.addWidget(btn1) vb.addWidget(btn2) vb.addWidget(btn3) w.show() sys.exit(app.exec_())
Singura funcție care are nevoie de explicații în acest moment este metoda addWidget(). Este folosit pentru a insera widget-uri în HBox sau VBox aspect. Este, de asemenea, folosit în alte layout-uri în care necesită un număr diferit de parametri, așa cum veți vedea în secțiunea următoare. Widgeturile vor apărea în interiorul aspectului în ordinea în care le inserați.
QGridLayout
QGridLayout este folosit pentru a crea interfețe în care widget-urile sunt așezate sub forma unei grile (cum ar fi o matrice sau o matrice 2D). Pentru a insera elemente într-un aspect al grilei, puteți utiliza reprezentarea matriceală pentru a defini numărul de rânduri și coloane din grilă, precum și poziția acelor elemente.
De exemplu, pentru a crea o grilă 3*3 (adică o grilă cu trei rânduri și trei coloane), veți scrie următorul cod:
Import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() grid = QGridLayout(w) for i in range(3): for j in range(3): grid.addWidget(QPushButton("Button"),i,j) w.show() sys.exit(app.exec_())
Aceasta va fi rezultatul:
Metoda addWidget() În aspectul grilă ia aceste argumente:
- Obiectul widget pe care doriți să îl adăugați la grilă
- Coordonata x a obiectului
- Coordonata y a obiectului
- Intervalul de rânduri (implicit =0)
- Col-span (implicit=0)
Pentru a înțelege mai bine, puteți introduce manual fiecare widget așa cum se arată mai jos
import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() grid = QGridLayout(w) grid.addWidget(QPushButton("Button one"),0,0) grid.addWidget(QPushButton("Button two"),0,1) grid.addWidget(QPushButton("Button three"),1,0) grid.addWidget(QPushButton("Button four"),1,1) w.show() sys.exit(app.exec_())
Iată cum va arăta grila:
De asemenea, puteți trece parametrii rowspan și colspan la addWidget() pentru a acoperi mai mult de un rând sau coloană.
De exemplu,
grid.addWidget(QPushButton("Button five"),2,0,1,0)
Acest lucru va crea un buton care se întinde peste ambele coloane.
Tematică
PyQt5 vine cu câteva teme încorporate pe care le puteți utiliza în aplicațiile dvs. The setStyle() metoda apelată în instanța QApplication este utilizată pentru a seta o anumită temă aplicației dvs.
De exemplu, adăugarea următoarei linii de cod va schimba tema aplicației dvs. de la implicit la Fusion
app.setStyle("Fusion")
Așa va arăta exemplul anterior în Tema Fusion
O altă funcție utilă pentru tematizarea aplicațiilor este metoda setPalette(). Iată codul pentru schimbarea culorii diferitelor widget-uri folosind setPalette().
import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import * from PyQt5.QtGui import QPalette if __name__ == "__main__": app = QApplication([]) app.setStyle("Fusion") qp = QPalette() qp.setColor(QPalette.ButtonText, Qt.black) qp.setColor(QPalette.Window, Qt.black) qp.setColor(QPalette.Button, Qt.gray) app.setPalette(qp) w = QWidget() grid = QGridLayout(w) grid.addWidget(QPushButton("Button one"),0,0) grid.addWidget(QPushButton("Button two"),0,1) grid.addWidget(QPushButton("Button three"),1,0) grid.addWidget(QPushButton("Button four"),1,1) w.show() sys.exit(app.exec_())
Iată rezultatul.
Pentru a utiliza metoda setPalette(), trebuie mai întâi să definiți o paletă. Acest lucru se realizează prin crearea unui obiect din clasa QPalette.
qp = QPalette()
Observați că clasa QPalette aparține modulului QtGui și va trebui să o importați pentru ca aceasta să funcționeze. După ce ați creat obiectul QPalette, utilizați metoda setColor() pentru a transmite numele unui widget a cărui culoare doriți să o modificați și culoarea pe care doriți să o setați.
qp.setColor(QPalette.Window, Qt.black)
Aceasta va schimba culoarea ferestrei în negru. După ce ați definit schema de culori, utilizați funcția setPalette() pentru a aplica paleta aplicației dvs.
app.setPalette(qp)
Acesta este tot ce trebuie să faceți dacă doriți să creați câteva teme de bază pentru aplicația dvs. PyQt vă permite, de asemenea, să utilizați foi de stil pentru a defini aspectul widget-urilor dvs. Dacă sunteți familiarizat cu CSS, puteți defini cu ușurință stiluri avansate pentru aplicația dvs. folosind Qt Style Sheets.
Rezumat
- PyQt este legarea python pentru C++ Cadrul UI, Qt.
- PyQt4 și PyQt5 sunt cele două versiuni majore dezvoltate de Riverbank Computing.
- Principalele module ale cadrului PyQt sunt:
- Qt
- QtCore
- QtWidgets
- QtGui
- QtSql
- QtNetwork
- PyQt acceptă diverse widget-uri precum:
- Butoane
- Etichete text
- Câmpuri text
- Butoane radio și casete de selectare
- Bare de instrumente și bare de meniu
- kit web
- Semne de carte
- Docks
- În PyQt, interactivitatea este implementată folosind semnalele si sloturi.
- An eveniment este o acțiune efectuată de un utilizator în GUI (cum ar fi a face clic pe un buton).
- A semnal este ridicat de widgetul corespunzător atunci când are loc un eveniment pe acesta.
- A slot este o funcție care este conectată la semnal și se execută atunci când semnalul este ridicat.
- PyQt are un motor de layout robust și acceptă design și management avansat de layout. Acestea sunt două scheme de aspect utilizate frecvent în PyQt:
- Box Aspect
- Grid Layout
- Designerul PyQt vă permite să creați teme personalizate pentru aplicația GUI și are suport încorporat pentru foile de stil.
- qtcreator Python poate fi folosit pentru a crea interfețe de utilizator, precum și aplicații independente.