Tutorial PyQt5 cu exemple: Creare Python Interfețe grafice cu Qt

⚡ Rezumat inteligent

PyQt este un Python legare pentru setul de instrumente Qt widget multiplatformă, permițând dezvoltatorilor să construiască interfețe grafice desktop native. Acesta cuprinde peste șase sute C++ clase care acoperă ferestre, butoane, machete, semnale, sloturi și teme pentru Windows, macOSși Linux.

  • 🔘 Ce este PyQt: A Python legare pentru Qt C++ cadru de lucru, întreținut de Riverbank Computing.
  • ☑️ versiuni: PyQt4 leagă Qt 4.x și 5.x; PyQt5 vizează doar seria Qt 5.x.
  • Instalare: Managerul de pachete pip instalează PyQt5 dintr-o roată cu o singură comandă.
  • 🧪 Prima aplicație: QApplication și QWidget creează și afișează o fereastră de bază pe ecran.
  • 🛠️ Signals și sloturi: Evenimentele widgeturilor generează semnale care se conectează la Python funcții slot.
  • 🤖 Pregătit pentru inteligența artificială: PyQt construiește front-end-uri desktop care rulează și vizualizează modele de învățare automată.

Tutorial PyQt5

Secțiunile de mai jos vă prezintă noțiunile de bază despre PyQt, instalarea, widget-urile de bază, layout-urile și temele, cu exemple rulabile.

Ce este PyQt?

PyQt este Python legarea 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++ framework pentru scrierea de aplicații GUI pentru toate platformele desktop majore, mobile și embedded (suportă 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.

Caracteristici ale PyQt

Iată caracteristicile importante ale PyQt:

PyQt este format din peste șase sute de clase care acoperă o gamă largă de caracteristici precum:

  • 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 utilizator avansate, precum și aplicații independente. Multe companii importante din toate industriile utilizează Qt. Câteva exemple sunt LG, Mercedes, AMD, Panasonic și Harman.

Versiuni PyQt

PyQt este disponibil în două ediții, PyQt4 și PyQt5. PyQt4 oferă cod de legătură pentru legarea versiunilor 4.x și 5.x ale framework-ului Qt, în timp ce PyQt5 oferă o legătură doar pentru versiunile 5.x. Prin urmare, PyQt5 nu este compatibil cu versiunile anterioare depreciate ale versiunii mai vechi. În acest tutorial GUI PyQt, PyQt5 va fi utilizat pentru demonstrarea exemplelor. Pe lângă aceste două versiuni, Riverbank Computing oferă și PyQt3D - Python legături 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++ și Python cod sub capotă. Ca rezultat, este un proces complicat să îl construiești și să îl instalezi din sursă în comparație cu altele Python biblioteci. 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 continua. Puteți căuta instrucțiuni 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ă.

instalați PyQt5

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ă.

instalați PyQt5

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 pe computer, sunteți gata să scrieți Python Aplicații GUI.

Să începem cu o aplicație simplă în acest tutorial PyQt5, care va afișa o fereastră goală pe ecran.

Aprinde-ți Python 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, puteți face dublu clic pe fișierul salvat pentru a lansa aplicația. Dacă ați făcut totul corect, se va deschide o fereastră nouă cu titlul Guru99, așa cum se arată mai jos.

PyQt de bază Concepts

Grozav! Funcționează. Nu e mult, dar e suficient pentru a înțelege elementele de bază. Acum, în acest tutorial PyQt, haideți să vedem în detaliu ce face fiecare dintre liniile din programul vostru.

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 QApplication. Prin urmare, îl puteți înlocui și cu codul de mai jos și nici măcar nu va trebui 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, trebuie să rețineț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ă transmiteți un șir de caractere ca argument, care va seta titlul ferestrei la șirul de caractere transmis. Î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 folosește mecanismul buclei de evenimente pentru a implementa execuția paralelă. app.exec_() transferă controlul către Qt, care va închide aplicația doar atunci când utilizatorul o închide din interfața grafică. De aceea, ctrl+c nu va închide aplicația ca în alte Python programe. Deoarece Qt deține controlul asupra aplicației, Python evenimentele 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 iar sublinierea 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 momentul să creați niște interfețe mai complexe cu care utilizatorii să poată interacționa cu adevărat. Din nou, porniți-vă 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 altceva 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.

Dincolo de gol Windows

  1. 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.
  2. 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 însăși.

Acum că funcționează, haideți 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 și 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 și în exemplul anterior, începeți prin a crea o instanță de QApplication urmată de un widget simplu, adică o instanță de 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 final, 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 plasarea cursorului peste un element sau clicul pe un buton. Aceste acțiuni se numesc 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 Python funcții (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 declanșarea unei funcții slot ca răspuns la semnalul provenit de la un eveniment este următoarea:

 widget.signal.connect(slot)

Aceasta înseamnă că ori de câte ori o 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ă avem o imagine de ansamblu asupra structurii PyQt5. În această secțiune, veți vedea cum este organizat intern PyQt5 și veți afla despre diferitele module, biblioteci și clase API oferite de PyQt5.

Structura directorului PyQt5

Structura directorului PyQt5

Acestea sunt modulele fundamentale folosite de PythonLegarea lui Qt, în special PyQt5.

  • QtCombină toate clasele/modulele menționate mai jos într-un singur modul. Crește considerabil memoria utilizată de aplicație. Cu toate acestea, este mai ușor de gestionat framework-ul importând un 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.
  • QtWidgetsConț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ționalități 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()
  • QRadioButtonAcesta este un câmp de introducere a datelor 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")
  • QMenuBarAfișează o bară de meniu orizontală în partea de sus a ferestrei. Puteți adăuga la această bară doar obiecte din clasa QMenu. Aceste obiecte QMenu pot conține în plus ș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.
  • QTabSe folosește pentru a împărți conținutul unei ferestre în mai multe pagini care pot fi accesate prin diferite file din partea de sus a widgetului. Este alcătuit din două secțiuni: bara de file și pagina de file.
  • QScrollBarSe folosește pentru a crea bare de derulare care permit utilizatorului să deruleze în sus și în jos într-o fereastră. Se compune dintr-un cursor mobil, un cursor track și două butoane pentru a derula cursorul î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ă.
  • QDockUn widget de andocare este o subfereastră cu două proprietăți: poate fi mutată în fereastra principală și poate fi andocată în afara ferestrei părinte într-o 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.

  1. QBoxAspect
  2. 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.

QBoxAspect

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.

QBoxAspect

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:

QGridLayout

Metoda addWidget() din structura de grilă primește 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)
  • Spațiul de coloane (implicit = 0)

Pentru a înțelege mai bine, puteți insera 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:

QGridLayout

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.

QGridLayout

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.

Tematică

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.

Tematică

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 acest lucru 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 schimbaț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.

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.

Întrebări frecvente

Tkinter este livrat cu Python și se potrivește instrumentelor mici și simple. PyQt oferă mult mai multe widget-uri, un designer vizual și un aspect nativ, ceea ce îl face mai potrivit pentru aplicațiile desktop profesionale mari - cu prețul unei curbe de învățare mai abrupte și al licențierii GPL.

Ambele utilizează aceleași biblioteci Qt și au în comun API-uri aproape identice. Diferența cheie este licențierea: PyQt folosește GPL sau o licență comercială plătită, în timp ce PySide (Qt pentru Python) folosește LGPL, permițând distribuția gratuită cu sursă închisă.

Qt Designer este un instrument drag-and-drop care salvează aspectul ca fișier XML .ui. Convertiți-l în Python cu utilitarul pyuic5 sau încărcați-l la momentul execuției folosind uic.loadUi().

PyQt6 se leagă de noul framework Qt 6 și necesită enum-uri cu scop complet, cum ar fi Qt.AlignmentFlag.AlignLeft. PyQt5 vizează Qt 5 și rămâne cea mai utilizată versiune. PyQt6 elimină, de asemenea, unele module depreciate și adaugă un suport mai bun pentru DPI ridicat.

Folosește PyInstaller: rulează comanda pyinstaller –onefile –windowed app.py pentru a grupa scriptul, PyQt5 și bibliotecile Qt într-un singur executabil. Indicatorul –windowed ascunde consola. fbs și cx_Freeze sunt alternative populare.

PyQt5 este ușor de utilizat pentru începători dacă știți cunoștințe de bază. PythonÎnțelegerea claselor, obiectelor și a modelului semnale-și-sloturi ajută cel mai mult. Qt Designer vă permite să construiți vizual machete, astfel încât să puteți crea ferestre funcționale înainte de a stăpâni manual fiecare widget.

PyQt construiește interfețe desktop pentru modele de învățare automată - tablouri de bord care încarcă date, declanșează antrenament sau inferențe și afișează predicții, diagrame sau imagini. Se potrivește bine cu NumPy, pandas și Matplotlib, wrapping un model antrenat într-o interfață grafică prietenoasă.

Da. GitHub Copilot completează automat modelele PyQt5 comune, cum ar fi configurarea QApplication, crearea widget-urilor și conexiunile signal-slot dintr-un comentariu sau un nume de funcție. Rulați întotdeauna fereastra generată pentru a confirma că layout-urile și handlerele de evenimente se comportă conform așteptărilor.

Rezumați această postare cu: