PyQt5 vodič s primjerima: Izrada Python Grafička sučelja s Qt-om

⚡ Pametni sažetak

PyQt je Python povezivanje za višeplatformski Qt widget toolkit, omogućujući programerima izradu izvornih grafičkih korisničkih sučelja za stolna računala. Omotava više od šest stotina C++ klase koje pokrivaju prozore, gumbe, rasporede, signale, utore i teme za Windows, macOSi Linux.

  • 🔘 Što je PyQt: A Python vezanje za Qt C++ okvir, koji održava Riverbank Computing.
  • ☑️ verzije: PyQt4 se veže na Qt 4.x i 5.x; PyQt5 cilja samo na Qt 5.x seriju.
  • Instalacija: Upravitelj paketa pip instalira PyQt5 s kotača jednom naredbom.
  • 🧪 Prva aplikacija: QApplication i QWidget stvaraju i prikazuju osnovni prozor na ekranu.
  • 🛠️ Signali utori: Događaji widgeta podižu signale koji se povezuju s Python funkcije utora.
  • 🤖 Spremno za umjetnu inteligenciju: PyQt izrađuje desktop front-endove koji pokreću i vizualiziraju modele strojnog učenja.

Vodič za PyQt5

Odjeljci u nastavku vode vas od osnova PyQt-a kroz instalaciju, osnovne widgete, izglede i teme s primjerima koje možete pokrenuti.

Što je PyQt?

PyQt je Python povezivanje Qt-a s alatima otvorenog koda, koji također funkcionira kao okvir za razvoj višeplatformskih aplikacija. Qt je popularan C++ okvir za pisanje GUI aplikacija za sve glavne desktop, 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 tvrtka Riverbank Computing 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:

PyQt 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
  • Umrežavanje

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 i Harman.

PyQt verzije

PyQt je dostupan u dva izdanja, PyQt4 i PyQt5. PyQt4 pruža povezujući kod za povezivanje verzija 4.x i 5.x Qt okvira, dok PyQt5 pruža povezivanje samo za verzije 5.x. Kao rezultat toga, PyQt5 nije unatrag kompatibilan sa zastarjelim modulima starije verzije. U ovom PyQt GUI tutorialu, PyQt5 će se koristiti za demonstraciju primjera. Osim ove dvije verzije, Riverbank Computing također pruža PyQt3D - Python Veze za Qt3D okvir. Qt3D je aplikacijski okvir koji se koristi za stvaranje sustava za simulaciju 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, izgradnja i instalacija iz izvornog koda je kompliciraniji proces u usporedbi s drugim Python biblioteke. Međutim, PyQt5 možete jednostavno instalirati pomoću kotačić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 možete potražiti na ovoj poveznici: https://pypi.org/project/pip/.

Za instalaciju 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 binarna datoteka za verziju Python instaliran 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 GUI aplikacije.

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

Zapalite svoje 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 (naziv nije važan) i pritisnite F5 za pokretanje programa. Alternativno, samo dvaput kliknite spremljenu datoteku za pokretanje aplikacije. Ako ste sve ispravno napravili, otvorit će se novi prozor s naslovom Guru99 kao što je prikazano dolje.

Osnovni PyQt Concepts

Odlično! Radi. Nije puno, ali je dovoljno za shvaćanje osnova. Sada u ovom PyQt tutorialu, pogledajmo detaljno što radi svaki od redaka u vašem programu.

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 niste proslijedili nikakve argumente QApplication. Stoga ga možete zamijeniti i kodom u nastavku, a da ne morate ni 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 imati na umu da se widgeti mogu ugniježđivati ​​zajedno; najudaljeniji widget (tj. widget bez roditelja) naziva se Prozor.

w.setWindowTitle("Guru99")

Metoda setWindowTitle() omogućuje vam prosljeđivanje niza znakova kao argumenta koji će postaviti naslov prozora na niz znakova koji prosljeđujete. U primjeru PyQt5, prikazat će se naslovna traka 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 izvršavanja. app.exec_() predaje kontrolu Qt-u, koji će zatvoriti aplikaciju samo kada je korisnik zatvori iz GUI-ja. Zato ctrl+c neće zatvoriti aplikaciju kao u drugim Python programe. 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 metoda exec ima podcrtu u svom nazivu; to je zato što je exec() već bila ključna riječ u Python a podcrta rješava sukob imenovanja.

Iza praznih prozora

U prethodnom odjeljku vidjeli ste kako napraviti osnovni widget u Qt-u. Sada je vrijeme za izradu nekih složenijih sučelja s kojima korisnici mogu doista komunicirati. Ponovno, pokrenite svoj 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 napravili nikakve pogreške, 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 naslov prozora u okviru s porukom, zadani naslov je bio dan pomoću Python sebe.

Sada kada 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 dio 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 slotova u Qt-u. U aplikacijama temeljenim na GUI-ju, funkcije se izvršavaju na temelju radnji koje izvršava korisnik, poput zadržavanja pokazivača iznad elementa ili klika na gumb. Te se radnje nazivaju 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 slot funkcije kao odgovor na signal događaja je sljedeća:

 widget.signal.connect(slot)

To znači da kad god 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 opći pregled strukture PyQt5. U ovom odjeljku vidjet ćete kako je PyQt5 interno organiziran i saznati više o različitim modulima, bibliotekama i API klasama koje PyQt5 pruža.

PyQt5 struktura direktorija

PyQt5 struktura direktorija

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

  • QtKombinira sve dolje navedene klase/module u jedan modul. Znatno povećava memoriju koju aplikacija koristi. 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.
  • QtWidgetiSadrž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 multimedijske funkcionalnosti niske razine.
  • QtSql: implementira integraciju baze podataka za SQL baze podataka. Podržava ODBC, MySQL, Oracle, SQLitei PostgreSQL.

PyQt5 Widgeti

Evo popisa 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 za odabir, 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")
  • QMenuBarPrikazuje horizontalnu traku izbornika na vrhu prozora. U ovu traku možete dodati samo objekte klase QMenu. Ti objekti QMenu mogu nadalje sadržavati nizove znakova, objekte QAction ili druge objekte QMenu.
  • 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 dijeljenje sadržaja prozora na više stranica kojima se može pristupiti putem različitih kartica na vrhu widgeta. Sastoji se od dva dijela: trake s karticama i stranice s karticama.
  • QScrollBarKoristi se za stvaranje traka za pomicanje koje omogućuju korisniku pomicanje gore i dolje unutar prozora. Sastoji se od pomičnog klizača, klizača track 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.
  • QDockDock widget je podprozor s dva svojstva: može se premještati unutar glavnog prozora i može se usidriti izvan roditeljskog prozora na drugu lokaciju 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 prima ove argumente:

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

Za bolje razumijevanje, možete ručno umetnuti svaki widget kao što je prikazano dolje.

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, dodavanjem sljedećeg retka koda promijenit ćete temu vaše aplikacije iz zadane u Fusion.

app.setStyle("Fusion")

Ovako će prethodni primjer izgledati u Fusion temi.

Teme

Još jedna korisna funkcija za temiranje 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()

Imajte na umu 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 naziva widgeta čiju boju želite promijeniti i boje koju želite postaviti.

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

Ovo će promijeniti boju prozora u crnu. Nakon što ste definirali shemu boja, upotrijebite funkciju setPalette() za primjenu palete 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.

Pitanja i odgovori

Tkinter se isporučuje s Python i odgovara malim, jednostavnim alatima. PyQt nudi puno više widgeta, vizualni dizajner i nativni izgled, što ga čini boljim za velike, profesionalne desktop aplikacije - po cijenu strmije krivulje učenja i GPL licenciranja.

Oba povezuju iste Qt biblioteke i dijele gotovo identične API-je. Ključna razlika je licenciranje: PyQt koristi GPL ili plaćenu komercijalnu licencu, dok PySide (Qt za Python) koristi LGPL licencu, što omogućuje besplatnu distribuciju zatvorenog koda.

Qt Designer je alat za povlačenje i ispuštanje koji sprema vaš izgled kao XML .ui datoteku. Pretvorite ga u Python pomoću uslužnog programa pyuic5 ili ga učitajte za vrijeme izvođenja pomoću uic.loadUi().

PyQt6 se veže za noviji Qt 6 framework i zahtijeva potpuno ograničene nabrajanja, kao što je Qt.AlignmentFlag.AlignLeft. PyQt5 cilja Qt 5 i ostaje najšire korištena verzija. PyQt6 također izostavlja neke zastarjele module i dodaje bolju podršku za visoku DPI rezoluciju.

Koristite PyInstaller: pokrenite pyinstaller –onefile –windowed app.py za objedinjavanje skripte, PyQt5 i Qt biblioteka u jednu izvršnu datoteku. Zastavica –windowed skriva konzolu. fbs i cx_Freeze su popularne alternative.

PyQt5 je prilagođen početnicima ako znate osnove PythonRazumijevanje klasa, objekata i obrasca signals-and-slots najviše pomaže. Qt Designer vam omogućuje vizualnu izradu izgleda, tako da možete stvoriti radne prozore prije nego što ručno savladate svaki widget.

PyQt izrađuje desktop front-endove za modele strojnog učenja - nadzorne ploče koje učitavaju podatke, pokreću obuku ili zaključivanje te prikazuju predviđanja, grafikone ili slike. Dobro se slaže s NumPy-jem, pandasom i Matplotlibom, wrapom.ping obučeni model u prijateljskom GUI-ju.

Da. GitHub Copilot automatski dovršava uobičajene PyQt5 obrasce poput postavljanja QApplication, stvaranja widgeta i povezivanja signal-slot iz komentara ili naziva funkcije. Uvijek pokrenite generirani prozor kako biste potvrdili da se rasporedi i rukovatelji događajima ponašaju kako je predviđeno.

Sažmite ovu objavu uz: