Vodič za PyQt5 s primjerima: Dizajnirajte GUI pomoću PyQt-a Python

Što je PyQt?

PyQt je python vezanje widget-toolkita otvorenog koda Qt, koji također funkcionira kao okvir za razvoj aplikacija na različitim platformama. Qt je popularan C++ okvir za pisanje GUI aplikacija za sve glavne stolne, mobilne i ugrađene platforme (podržava Linux, Windows, MacOS, Android, iOS, Raspberry Pi i više).

PyQt je besplatni softver koji je razvila i održava Riverbank Computing, tvrtka sa sjedištem u Engleskoj, dok je Qt razvila finska tvrtka pod nazivom The Qt Company.

Značajke PyQT-a

Evo važnih značajki PyQt-a:

Naučite PyQt koji se sastoji od više od šest stotina klasa koje pokrivaju niz značajki kao što su

  • Grafičko korisničko sučelje
  • SQL baze podataka
  • Web alati
  • XML obrada
  • Mrežna oprema

Ove se značajke mogu kombinirati za stvaranje naprednih korisničkih sučelja, kao i samostalnih aplikacija. Mnoge velike tvrtke u svim industrijama koriste Qt. Neki primjeri su LG, Mercedes, AMD, Panasonic, Harman itd.

PyQt verzije

PyQt je dostupan u dva izdanja, PyQt4 i PyQt5. PyQt4 pruža ljepljivi kod za uvezivanje 4.x i 5.x verzija Qt frameworka dok PyQt5 daje uvezivanje samo za 5.x verzije. Kao rezultat toga, PyQt5 nije unatrag kompatibilan sa zastarjelim modulima starije verzije. U ovom vodiču za Qt GUI, PyQt5 će se koristiti za demonstraciju primjera. Osim ove dvije verzije,

Riverbank Computing također nudi PyQt3D — python povezivanja za Qt3D okvir. Qt3D je aplikacijski okvir koji se koristi za stvaranje simulacijskih sustava u stvarnom vremenu s 2D/3D renderiranjem.

Kako instalirati PyQt5

U ovom vodiču za PyQt5 vidjet ćemo dva načina instaliranja PyQt-a:

  • Korištenje Wheel datoteka
  • Izgradnja i instalacija iz izvora

Qt (izgovara se slatko) složen je sustav, a baza koda PyQt sadrži kompilirane C++ i Python kod ispod haube. Kao rezultat toga, kompliciran je proces izrade i instaliranja iz izvora u usporedbi s drugim bibliotekama pythona. Međutim, možete jednostavno instalirati PyQt5 pomoću kotača.

Montaža s kotačima

Kotači su novi standard Python format pakiranja i distribucije. Jednostavno rečeno, kotač je ZIP arhiva s posebnim imenom i .whl ekstenzija datoteke. Kotači se mogu postaviti pomoću pipa (Pythonupravitelj paketa), koji je prema zadanim postavkama uključen u novije verzije Python.

Dakle, ako imate Python 3.4 ili noviji instaliran, već imate pip. Međutim, ako koristite stariju verziju Python, morate preuzeti i instalirati pip prije nego što nastavite. Upute za to možete potražiti na ovoj poveznici: https://pypi.org/project/pip/.

Da biste instalirali PyQt5,

Korak 1) Otvorite naredbeni redak.
Otvorite naredbeni redak ili PowerShell u svom Windows stroj.

instalirajte PyQt5

Korak 2) Upišite sljedeće.

 pip install PyQt5

Korak 3) Instalacija uspjela.
Ovaj korak u ovom vodiču za PyQt5 će preuzeti paket PyQt5 whl (oko 50 MB) i instalirati ga na vaš sustav.

instalirajte PyQt5

Alternativno, također možete preuzeti a Windows binarno za verziju pythona instaliranu na vašem računalu.

Kada je dovršen, prijeđite na sljedeći odjeljak u ovom vodiču za PyQt5 da biste napisali svoju prvu GUI aplikaciju.

Osnovni PyQt Concepts i Programi

Sada kada ste uspješno instalirali PyQt5 na svoje računalo, spremni ste za pisanje Python Aplikacije za GUI dizajn.

Počnimo s jednostavnom aplikacijom u ovom vodiču za PyQt5 koja će prikazati prazan prozor na vašem zaslonu.

Zapali svoj python IDLE i upišite sljedeće:

Program 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_())

Spremite ga kao app.py (ime nije važno) i pritisnite F5 za pokretanje programa. Alternativno, samo dvaput kliknite na spremljenu datoteku za pokretanje aplikacije. Ako ste sve napravili kako treba, otvorit će se novi prozor s naslovom Guru99 kao što je prikazano ispod.

Osnovni PyQt Concepts

Sjajno! Radi. Nije puno, ali je dovoljno da se shvate osnove. Sada u ovom vodiču za PyQt, pogledajmo detaljno što svaki redak u vašem programu radi.

from PyQt5.QtWidgets import QApplication, QWidget

Ova izjava uvozi sve module koji su vam potrebni za stvaranje GUI-ja u trenutni prostor naziva. Modul QtWidgets sadrži sve glavne widgete koje ćete koristiti u ovome Python Qt vodič.

app = QApplication(sys.argv)

Ovdje stvarate objekt klase QApplication. Ovaj korak je neophodan za PyQt5; svaka UI aplikacija mora stvoriti instancu QApplication, kao neku vrstu ulazne točke u aplikaciju. Ako ga ne izradite, prikazat će se pogreške.

sys.argv je popis parametara naredbenog retka koje možete proslijediti aplikaciji kada je pokrećete kroz ljusku ili tijekom automatizacije sučelja.

U ovom primjeru PyQt5, QApplications niste proslijedili nijedan argument. Stoga ga također možete zamijeniti donjim kodom i čak ne morate uvoziti sys modul.

app = QApplication([])
w = QWidget()

Zatim napravimo objekt klase QWidget. QWidget je osnovna klasa svih UI objekata u Qt-u i gotovo sve što vidite u aplikaciji je widget. To uključuje dijaloge, tekstove, gumbe, trake i tako dalje. Značajka koja vam omogućuje dizajn složenih korisničkih sučelja je da widgeti mogu biti ugniježđeni, tj. možete imati widget unutar widgeta, koji je unutar još jednog widgeta. Vidjet ćete ovo na djelu u sljedećem odjeljku.

w.resize(300,300)

Metoda promjene veličine klase QWidget omogućuje vam postavljanje dimenzija bilo kojeg widgeta. U ovom slučaju promijenili ste veličinu prozora na 300 x 300 piksela.

Ovdje biste trebali zapamtiti da widgeti mogu biti ugniježđeni zajedno, najudaljeniji widget (tj. widget bez roditelja) naziva se prozor.

w.setWindowTitle("Guru99")

Metoda setWindowTitle() omogućuje prosljeđivanje niza kao argumenta koji će postaviti naslov prozora na niz koji proslijeđujete. U primjeru PyQt5, naslovna traka će prikazati Guru99.

w.show()

show() jednostavno prikazuje widget na ekranu monitora.

sys.exit(app.exec_())

Metoda app.exec_() pokreće Qt/C++ petlja događaja. Kao što znate, PyQt je uglavnom napisan u C++ i koristi mehanizam petlje događaja za implementaciju paralelnog izvođenja. app.exec_() predaje kontrolu Qt-u koji će izaći iz aplikacije samo kada je korisnik zatvori iz GUI-ja. Zato ctrl+c neće izaći iz aplikacije kao u drugim python programima. Budući da Qt ima kontrolu nad aplikacijom, python događaji se ne obrađuju osim ako ih ne postavimo unutar aplikacije. Također, imajte na umu da exec metoda ima podvlaku u svom nazivu; to je zato što je exec() već bila ključna riječ u pythonu i podvlaka rješava sukob naziva.

Iza praznih prozora

U prethodnom odjeljku vidjeli ste kako napraviti osnovni widget u Qt-u. Sada je vrijeme da napravimo neka uključenija sučelja s kojima korisnici mogu istinski komunicirati. Opet, zapalite svoje IDLE i napiši sljedeće.

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_())

Spremite datoteku kao appone.py ili bilo što drugo i pritisnite F5 za pokretanje programa. Ako niste pogriješili, IDLE otvorit će novi prozor s nekim tekstom i gumbom kao što je prikazano u nastavku.

Izvan praznog Windows

  1. Nakon što kliknete na gumb u prvom prozoru, otvorit će se novi okvir s porukom s tekstom koji ste napisali.
  2. Sada možete kliknuti na gumb Sakrij pojedinosti/Prikaži pojedinosti za uključivanje/isključivanje vidljivosti dodatnog teksta.

Kao što vidite, budući da nismo postavili nikakav naslov prozora u okvir s porukom, zadani naslov je dao sam python.

Sad kad radi, pogledajmo dodatni kod koji ste dodali prethodnom primjeru PyQt5.

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

Ovo uvozi još neke widgete koje ste koristili u primjerima PyQt5, naime 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_()

Ovdje ste definirali metodu pod nazivom dialog koja stvara widget okvira s porukom i postavlja dio teksta na gumbe i druga polja.

Metoda dijaloga poziva se iz glavnog bloka programa kada se pritisne gumb u određenom widgetu (u ovom slučaju, btn PushButton). Događaj klika pokrenut na tom gumbu uzrokuje izvršavanje ove funkcije. Takva se funkcija u Qt-u naziva slot, a o njoj ćete naučiti više signali i mjesta u narednim paragrafima.

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")

Ovo je glavni odjeljak aplikacije i kao u prethodnom primjeru, počinjete stvaranjem instance QApplication nakon čega slijedi jednostavan widget, tj. instanca QWidget.

label = QLabel(w)
    btn = QPushButton(w)

Dodali ste dva nova widgeta u ovu aplikaciju: QLabel i QPushButton. QLabel se koristi za ispis teksta koji se ne može uređivati ​​ili rezerviranih mjesta unutar widgeta, dok se QPushButton koristi za stvaranje gumba na koji se može kliknuti.

Ovdje je važno primijetiti da kada kreirate label i btn objekte, prosljeđujete objekt prozora (w) konstruktorima QLabel i QPushButton. Ovako funkcionira gniježđenje u PyQt5. Da biste stvorili widget unutar drugog widgeta, proslijedite referencu nadređenog widgeta podređenom konstruktoru.

label.move(100,130)
btn.move(110,150)

move() se koristi za postavljanje položaja widgeta u odnosu na njegov nadređeni widget. U prvom slučaju, oznaka će se pomaknuti 100px s lijeve strane i 130px s vrha prozora.

Slično, gumb će biti postavljen 110px od lijevog i 150px od vrha prozora. Ovaj primjer je grubi način postizanja izgleda i općenito se ne koristi u proizvodnji; ovdje je uključen samo u svrhu učenja. Qt podržava različite izglede koje ćete detaljno vidjeti u nadolazećim odjeljcima ovog vodiča za PyQt.

btn.clicked.connect(dialog)

Konačno, ovo je primjer signala i utora u Qt-u. U aplikacijama koje se temelje na GUI-ju, funkcije se izvršavaju na temelju radnji koje izvodi korisnik, poput prelaska pokazivačem iznad elementa ili klikanja gumba. Ove radnje nazivaju se događaji. Podsjetimo se da metoda app.exec_() prenosi kontrolu na Qt Događaj-petlja. To je ono čemu služi petlja događaja: osluškivanje događaja i izvođenje radnji kao odgovor.

Kad god se dogodi neki događaj, poput klika korisnika na gumb, odgovarajući Qt widget pokreće a signal. Ovi se signali mogu povezati s python funkcije (kao dijaloška funkcija u ovom primjeru) tako da se funkcija izvršava kada se aktivira signal. Te se funkcije nazivaju mjesta na Qt jeziku.

Nakon toga, osnovna sintaksa za pokretanje funkcije utora kao odgovor na signal iz događaja je sljedeća

 widget.signal.connect(slot)

Što znači da kad god a signal pokreće a widget, povezani prorez funkcija će se izvršiti. Ukratko, Qt koristi signale i utore za komunikaciju između objekata i olakšavanje ponovne upotrebe komponenti i interaktivnosti.

Sada kada znate kako ugniježditi widgete i implementirati interakcije pomoću signala i utora, evo popisa korisnih widgeta i drugih klasa koje možete koristiti u svojim PyQt aplikacijama.

Komponente i widgeti

Postoji veliki broj widgeta dostupnih u PyQt-u za izradu GUI aplikacija. Međutim, s PyQt5, došlo je do preslagivanja klasa u različite module i revizija u licencama.

Stoga je ključno imati pogled na visoku razinu strukture PyQt5. U ovom odjeljku vidjet ćete kako je PyQt5 interno organiziran i naučiti o različitim modulima, bibliotekama i API klasama koje nudi PyQt5.

PyQt5 struktura direktorija

PyQt5 struktura direktorija

Ovo su temeljni moduli koje koristi PythonQt vezivanje, posebno PyQt5.

  • Qt: Kombinira sve dolje navedene klase/module u jedan modul. Značajno povećava memoriju koju koristi aplikacija. Međutim, lakše je upravljati okvirom uvozom samo jednog modula.
  • QtCore: Sadrži osnovne negrafičke klase koje koriste drugi moduli. Ovo je mjesto gdje se implementiraju Qt petlja događaja, signali i povezivanje utora, itd.
  • QtWidgeti: Sadrži većinu widgeta dostupnih u Pyqt5.
  • QtGui: Sadrži GUI komponente i proširuje QtCore modul.
  • QtNetwork: Sadrži klase koje se koriste za implementaciju mrežnog programiranja kroz Qt. Podržava TCP poslužitelje, TCP utičnice, UDP utičnice, SSL rukovanje, mrežne sesije i DNS pretraživanja.
  • QtMultimedia pruža multimedijsku funkcionalnost niske razine.
  • QtSql: implementira integraciju baze podataka za SQL baze podataka. Podržava ODBC, MySQL, Oracle, SQLitei PostgreSQL.

PyQt5 Widgeti

Ovdje je popis najčešće korištenih widgeta u PyQt5

  • QLineEdit: Ovo je polje za unos koje korisniku omogućuje unos jednog retka teksta.
    line = QLineEdit()
  • QRadioButton: Ovo je polje za unos s gumbom koji se može odabrati, slično radio gumbima u html-u.
    rad = QRadioButton("button title")
    rad.setChecked(True)  #to select the button by default.
  • QComboBox: Koristi se za prikaz padajućeg izbornika s popisom stavki koje je moguće odabrati.
    drop = QComboBox(w)
    drop.addItems(["item one", "item two", "item three"])
  • QCheckBox: Prikazuje kvadratni okvir koji se može odabrati ispred oznake koja je označena ako je odabrana, slično radio gumbima.
    check = QCheckBox("button title")
  • QMenuBar: prikazuje vodoravnu traku izbornika na vrhu prozora. U ovu traku možete dodati samo objekte klase QMenu. Ti QMenu objekti mogu dalje sadržavati nizove, QAction objekte ili druge QMenu objekte.
  • QToolBar: To je vodoravna traka ili okno koje se može pomicati unutar prozora. Može sadržavati gumbe i druge widgete.
  • QTab: koristi se za rastavljanje sadržaja prozora na više stranica kojima se može pristupiti putem različitih kartica na vrhu widgeta. Sastoji se od dva odjeljka: trake s karticama i stranice s karticama.
  • QScrollBar: Koristi se za stvaranje traka za pomicanje koje korisniku omogućuju pomicanje gore i dolje unutar prozora. Sastoji se od pomičnog klizača, staze klizača i dva gumba za pomicanje klizača gore ili dolje.
    scroll = QScrollBar()
  • QSplitter: Razdjelnici se koriste za odvajanje sadržaja prozora tako da su widgeti ispravno grupirani i da ne izgledaju pretrpano. QSplitter je jedan od primarnih rukovatelja izgledom dostupnih u PyQt5 i koristi se za horizontalno i vertikalno dijeljenje sadržaja.
  • QDock: Dock widget je podprozor s dva svojstva:
  • Može se pomicati unutar glavnog prozora i
  • Može se pričvrstiti izvan nadređenog prozora na drugo mjesto na zaslonu.

Izgledi i teme

U prethodnim primjerima PyQt5 samo ste koristili metode move() i resize() za postavljanje položaja widgeta u vašem GUI-ju.

Međutim, PyQt ima robustan mehanizam za upravljanje izgledom koji se može koristiti za stvaranje naprednih korisničkih sučelja za aplikacije. U ovom odjeljku naučit ćete o dvije važne klase koje se koriste u Qt-u za stvaranje i upravljanje izgledima.

  1. QBoxRaspored
  2. QGridLayout

QBoxRaspored

QBoxRaspored se koristi za poravnavanje podređenih widgeta izgleda u vodoravni ili okomiti red. Dvije interesne klase koje nasljeđuju od QBoxRaspored je:

  • QHBoxIzgled: koristi se za vodoravno postavljanje podređenih widgeta.
  • QVBoxRaspored: koristi se za okomito postavljanje podređenih widgeta.

Na primjer, ovako su tri gumba poravnata s QHBoxIzgled će izgledati.

QBoxRaspored

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_())

A ovako će izgledati u QV-uBoxIzgled.

QBoxRaspored

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_())

Jedina funkcija koja u ovom trenutku treba bilo kakvo objašnjenje je metoda addWidget(). Koristi se za umetanje widgeta u HBox ili VBox raspored. Također se koristi u drugim izgledima gdje uzima različit broj parametara kao što ćete vidjeti u sljedećem odjeljku. Widgeti će se pojaviti unutar izgleda redoslijedom kojim ste ih umetnuli.

QGridLayout

QGridLayout se koristi za stvaranje sučelja u kojima su widgeti postavljeni u obliku mreže (poput matrice ili 2D polja). Za umetanje elemenata u raspored rešetke, možete upotrijebiti matrični prikaz za definiranje broja redaka i stupaca u rešetki, kao i položaj tih elemenata.

Na primjer, da biste stvorili mrežu 3*3 (tj. mrežu s tri retka i tri stupca), napisat ćete sljedeći kod:

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_())

Ovo će biti izlaz:

QGridLayout

Metoda addWidget() u rasporedu mreže uzima ove argumente:

  • Objekt widgeta koji želite dodati u mrežu
  • X-koordinata objekta
  • Y-koordinata objekta
  • Raspon retka (zadano =0)
  • Raspon stupaca (zadano=0)

Da biste to bolje razumjeli, možete ručno umetnuti svaki widget kao što je prikazano u nastavku

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_())

Ovako će izgledati mreža:

QGridLayout

Također možete proslijediti parametre rowspan i colspan u addWidget() kako biste obuhvatili više od jednog retka ili stupca.

Na primjer,

grid.addWidget(QPushButton("Button five"),2,0,1,0)

Ovo će stvoriti gumb koji se proteže preko oba stupca.

QGridLayout

Teme

PyQt5 dolazi s nekim ugrađenim temama koje možete koristiti u svojim aplikacijama. The setStyle() metoda koja se poziva na instanci QApplication koristi se za postavljanje određene teme u vašu aplikaciju.

Na primjer, dodavanje sljedećeg retka koda promijenit će temu vaše aplikacije iz zadane u Fusion

app.setStyle("Fusion")

Ovako će prethodni primjer izgledati u Fusion Theme

Teme

Još jedna korisna funkcija za tematiziranje vaših aplikacija je metoda setPalette(). Evo koda za promjenu boje različitih widgeta pomoću 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_())

Evo rezultata.

Teme

Da biste koristili metodu setPalette(), prvo trebate definirati paletu. To se postiže stvaranjem objekta klase QPalette.

 qp = QPalette()

Primijetite da klasa QPalette pripada QtGui modulu i morat ćete je uvesti da bi ovo radilo. Nakon što ste kreirali objekt QPalette, upotrijebite metodu setColor() za prosljeđivanje imena widgeta čiju boju želite promijeniti i boju koju želite postaviti.

 qp.setColor(QPalette.Window, Qt.black)

Ovo će promijeniti boju prozora u crnu. Nakon što ste definirali svoju shemu boja, upotrijebite funkciju setPalette() da biste primijenili paletu na svoju aplikaciju.

app.setPalette(qp)

To je sve što trebate učiniti ako želite stvoriti neke osnovne teme za svoju aplikaciju. PyQt vam također omogućuje korištenje tablica stilova za definiranje izgleda vaših widgeta. Ako ste upoznati s CSS-om, možete jednostavno definirati napredne stilove za svoju aplikaciju koristeći Qt Style Sheets.

rezime

  • PyQt je python vezanje za C++ UI okvir, Qt.
  • PyQt4 i PyQt5 dvije su glavne verzije koje je razvio Riverbank Computing.
  • Glavni moduli okvira PyQt su:
    1. Qt
    2. QtCore
    3. QtWidgeti
    4. QtGui
    5. QtSql
    6. QtNetwork
  • PyQt podržava razne widgete kao što su:
    1. tipke
    2. Tekstualne oznake
    3. Tekstna polja
    4. Radio gumbi i potvrdni okviri
    5. Alatne trake i trake izbornika
    6. WebKit
    7. Kartice
    8. dokovima
  • U PyQt-u je interaktivnost implementirana pomoću signali i utora.
  • An događaj je radnja koju korisnik izvodi u GUI-u (poput klikanja gumba).
  • A signal podiže odgovarajući widget kada se na njemu dogodi događaj.
  • A prorez je funkcija koja je povezana sa signalom i izvršava se kada je signal podignut.
  • PyQt ima robustan mehanizam za izgled i podržava napredni dizajn i upravljanje izgledom. Ovo su dvije često korištene sheme izgleda u PyQt-u:
    1. Box Raspored
    2. Izgled rešetke
  • PyQt dizajner omogućuje vam stvaranje prilagođenih tema za GUI aplikaciju i ima ugrađenu podršku za stilske listove.
  • qtcreator Python može se koristiti za izradu korisničkih sučelja kao i samostalnih aplikacija.