PyQt5 Handledning med exempel: Designa GUI med PyQt in Python
Vad รคr PyQt?
PyQt รคr en python-bindning av widget-verktygssatsen Qt med รถppen kรคllkod, som ocksรฅ fungerar som ett ramverk fรถr applikationsutveckling รถver flera plattformar. Qt รคr en populรคr C++ ramverk fรถr att skriva GUI-applikationer fรถr alla stรถrre stationรคra, mobila och inbyggda plattformar (stรถdjer Linux, Windows, Mac OS, Android, iOS, Raspberry Pi och mer).
PyQt รคr en fri programvara utvecklad och underhรฅllen av Riverbank Computing, ett fรถretag baserat i England, medan Qt รคr utvecklat av ett finskt fรถretag som heter The Qt Company.
Funktioner i PyQT
Hรคr รคr viktiga funktioner i PyQt:
Lรคr dig PyQt som bestรฅr av mer รคn sexhundra klasser som tรคcker en rad funktioner som t.ex
- Grafiska anvรคndargrรคnssnitt
- SQL Databaser
- Webbverktygssatser
- XML-bearbetning
- nรคtverk
Dessa funktioner kan kombineras fรถr att skapa avancerade anvรคndargrรคnssnitt sรฅvรคl som fristรฅende applikationer. Mรฅnga stora fรถretag inom alla branscher anvรคnder Qt. Nรฅgra exempel รคr LG, Mercedes, AMD, Panasonic, Harman, etc.
PyQt-versioner
PyQt finns i tvรฅ utgรฅvor, PyQt4 och PyQt5. PyQt4 tillhandahรฅller limkod fรถr att binda 4.x- och 5.x-versioner av Qt-ramverket medan PyQt5 endast tillhandahรฅller en bindning fรถr 5.x-versionerna. Som ett resultat รคr PyQt5 inte bakรฅtkompatibel med de fรถrรฅldrade modulerna i den รคldre versionen. I denna Qt GUI-handledning kommer PyQt5 att anvรคndas fรถr att demonstrera exempel. Fรถrutom dessa tvรฅ versioner,
Riverbank Computing tillhandahรฅller ocksรฅ PyQt3D โ pythonbindningarna fรถr Qt3D-ramverket. Qt3D รคr ett applikationsramverk som anvรคnds fรถr att skapa realtidssimuleringssystem med 2D/3D-rendering.
Hur man installerar PyQt5
I denna PyQt5-handledning kommer vi att se de tvรฅ sรคtten att installera PyQt:
- Anvรคnder hjulfiler
- Bygga och installera frรฅn kรคllan
Qt (uttalas sรถt) รคr ett komplext system, och PyQt-kodbasen innehรฅller kompilerade C++ och Python kod under huven. Som ett resultat รคr det en komplicerad process att bygga och installera den frรฅn kรคllan jรคmfรถrt med andra pythonbibliotek. Du kan dock enkelt installera PyQt5 med hjรคlp av hjul.
Montering med hjul
Hjul รคr den nya standarden Python fรถrpacknings- och distributionsformat. Ett hjul รคr helt enkelt ett ZIP-arkiv med ett speciellt namn och .WHL filtillรคgg. Hjul kan installeras med pip (Pythons pakethanterare), som ingรฅr som standard i de senaste versionerna av Python.
Sรฅ, om du har Python 3.4 eller senare installerat, du har redan pip. Om du dรคremot anvรคnder en รคldre version av Python, mรฅste du ladda ner och installera pip innan du gรฅr vidare. Du kan sรถka efter instruktioner fรถr det pรฅ denna lรคnk: https://pypi.org/project/pip/.
Fรถr att installera PyQt5,
Steg 1) รppna kommandotolken.
รppna kommandotolken eller PowerShell i din Windows maskin.
Steg 2) Skriv in fรถljande.
pip install PyQt5
Steg 3) Lyckad installation.
Det hรคr steget i denna PyQt5-handledning kommer att ladda ner PyQt5 whl-paketet (ca 50 MB) och installera det pรฅ ditt system.
Alternativt kan du ocksรฅ ladda ner en Windows binรคr fรถr versionen av python installerad pรฅ din dator.
Nรคr det รคr klart, fortsรคtt till nรคsta avsnitt i denna PyQt5-handledning fรถr att skriva din fรถrsta GUI-app.
Grundlรคggande PyQt Concepts och program
Nu nรคr du framgรฅngsrikt har installerat PyQt5 i din dator รคr du redo att skriva Python GUI-designapplikationer.
Lรฅt oss bรถrja med en enkel app i denna PyQt5-handledning som visar ett tomt fรถnster pรฅ din skรคrm.
Sรคtt igรฅng din python IDLE och skriv in fรถljande:
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_())
Spara det som app.py (namnet spelar ingen roll) och tryck pรฅ F5 fรถr att kรถra programmet. Alternativt, dubbelklicka bara pรฅ din sparade fil fรถr att starta programmet. Om du har gjort allt rรคtt kommer ett nytt fรถnster att รถppnas med titeln Guru99 som visas nedan.
Bra! Det fungerar. Det รคr inte mycket, men det rรคcker fรถr att fรถrstรฅ grunderna. Nu i denna PyQt-handledning, lรฅt oss se i detalj vad var och en av raderna i ditt program gรถr.
from PyQt5.QtWidgets import QApplication, QWidget
Denna sats importerar alla moduler du behรถver fรถr att skapa ett GUI till det aktuella namnomrรฅdet. QtWidgets-modulen innehรฅller alla stรถrre widgets som du kommer att anvรคnda i detta Python Qt handledning.
app = QApplication(sys.argv)
Hรคr skapar du ett objekt av klassen QApplication. Detta steg รคr en nรถdvรคndighet fรถr PyQt5; varje UI-app mรฅste skapa en instans av QApplication, som en slags ingรฅngspunkt till appen. Om du inte skapar det kommer fel att visas.
sys.argv รคr listan รถver kommandoradsparametrar som du kan skicka till programmet nรคr du startar det genom skalet eller nรคr du automatiserar grรคnssnittet.
I detta PyQt5-exempel skickade du inga argument till QApplications. Dรคrfรถr kan du รคven ersรคtta den med koden nedan och inte ens behรถva importera sys-modulen.
app = QApplication([])
w = QWidget()
Dรคrefter gรถr vi ett objekt av klassen QWidget. QWidget รคr basklassen fรถr alla UI-objekt i Qt, och praktiskt taget allt du ser i en app รคr en widget. Det inkluderar dialoger, texter, knappar, staplar och sรฅ vidare. Funktionen som gรถr att du kan designa komplexa anvรคndargrรคnssnitt รคr att widgetarna kan kapslas, dvs du kan ha en widget inuti en widget, som finns i รคnnu en widget. Du kommer att se detta i aktion i nรคsta avsnitt.
w.resize(300,300)
Resize-metoden fรถr QWidget-klassen lรฅter dig stรคlla in mรฅtten pรฅ vilken widget som helst. I det hรคr fallet har du รคndrat storleken pรฅ fรถnstret till 300px med 300px.
Hรคr bรถr du komma ihรฅg att widgets kan kapslas ihop, den yttersta widgeten (dvs. widgeten utan fรถrรคlder) kallas ett fรถnster.
w.setWindowTitle("Guru99")
Metoden setWindowTitle() lรฅter dig skicka en strรคng som ett argument som kommer att stรคlla in titeln pรฅ fรถnstret till den strรคng du skickar. I PyQt5-exemplet kommer titelraden att visa Guru99.
w.show()
show() visar helt enkelt widgeten pรฅ skรคrmen.
sys.exit(app.exec_())
Metoden app.exec_() startar Qt/C++ hรคndelseslinga. Som ni vet รคr PyQt till stor del inskrivet C++ och anvรคnder hรคndelseloopmekanismen fรถr att implementera parallell exekvering. app.exec_() รถverfรถr kontrollen till Qt som kommer att avsluta applikationen endast nรคr anvรคndaren stรคnger den frรฅn GUI. Det รคr dรคrfรถr ctrl+c inte kommer att avsluta programmet som i andra pythonprogram. Eftersom Qt har kontroll รถver appen, bearbetas inte python-hรคndelser om vi inte stรคller in dem i applikationen. Observera ocksรฅ att exec-metoden har ett understreck i sitt namn; detta beror pรฅ att exec() redan var ett nyckelord i python och understrecket lรถser namnkonflikt.
Bortom tomma fรถnster
I fรถregรฅende avsnitt sรฅg du hur man gรถr en grundlรคggande widget i Qt. Det รคr nu dags att skapa nรฅgra mer involverade grรคnssnitt som anvรคndarna verkligen kan interagera med. ร terigen, elda upp din IDLE och skriv fรถljande.
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_())
Spara filen som appone.py eller nรฅgot du vill och tryck pรฅ F5 fรถr att kรถra programmet. Om du inte har gjort nรฅgra misstag, IDLE kommer att รถppna ett nytt fรถnster med lite text och en knapp som visas nedan.
- Nรคr du klickar pรฅ knappen i det fรถrsta fรถnstret รถppnas en ny meddelanderuta med texten du skrivit.
- Du kan nu klicka pรฅ knappen Dรถlj detaljer/Visa detaljer fรถr att vรคxla synligheten fรถr ytterligare text.
Som du kan se, eftersom vi inte hade stรคllt in nรฅgon fรถnstertitel i meddelanderutan, tillhandahรถlls en standardtitel av python sjรคlv.
Nu nรคr det fungerar lรฅt oss ta en titt pรฅ den extra koden som du har lagt till i det tidigare PyQt5-exemplet.
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
Detta importerar nรฅgra fler widgets som du har anvรคnt i PyQt5-exemplen, nรคmligen QLabel, QPushButton och 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_()
Hรคr har du definierat en metod med namnet dialog som skapar en meddelandebox-widget och stรคller in lite text till knapparna och andra fรคlt.
Dialogmetoden anropas frรฅn programmets huvudblock nรคr en knapp trycks in i en specifik widget (i detta fall btn-tryckknappen). Klickhรคndelsen som utlรถses pรฅ den knappen gรถr att den hรคr funktionen kรถrs. En sรฅdan funktion kallas slot i Qt, och du kommer att lรคra dig mer om signaler och spelautomater i de kommande styckena.
if __name__ == "__main__":
app = QApplication(sys.argv)
w = QWidget()
w.resize(300,300)
w.setWindowTitle("Guru99")
Detta รคr huvuddelen av appen och som i fรถregรฅende exempel bรถrjar du med att skapa en instans av QApplication fรถljt av en enkel widget, alltsรฅ en instans av QWidget.
label = QLabel(w)
btn = QPushButton(w)
Du har lagt till tvรฅ nya widgets i denna applikation: QLabel och QPushButton. QLabel anvรคnds fรถr att skriva ut icke-redigerbar text eller platshรฅllare inuti en widget, medan QPushButton anvรคnds fรถr att skapa en klickbar knapp.
Det kritiska att lรคgga mรคrke till hรคr รคr att nรคr du skapar etikett- och btn-objekten skickar du fรถnsterobjektet (w) till konstruktรถrerna av QLabel och QPushButton. Sรฅ hรคr fungerar kapsling i PyQt5. Fรถr att skapa en widget i en annan widget skickar du referensen fรถr den รถverordnade widgeten till barnets konstruktor.
label.move(100,130) btn.move(110,150)
move() anvรคnds fรถr att stรคlla in positionen fรถr en widget i fรถrhรฅllande till dess รถverordnade widget. I det fรถrsta fallet kommer etiketten att flyttas 100px frรฅn vรคnster och 130px frรฅn toppen av fรถnstret.
Pรฅ samma sรคtt kommer knappen att placeras 110px frรฅn vรคnster och 150px frรฅn toppen av fรถnstret. Detta exempel รคr ett grovt sรคtt att uppnรฅ layouter och anvรคnds vanligtvis inte i produktionen; den ingรฅr bara hรคr i lรคrande syfte. Qt stรถder olika layouter som du kommer att se i detalj i de kommande avsnitten av denna PyQt-handledning.
btn.clicked.connect(dialog)
Slutligen รคr detta ett exempel pรฅ signaler och luckor i Qt. I GUI-baserade applikationer exekveras funktioner baserat pรฅ de รฅtgรคrder som utfรถrs av anvรคndaren, som att hรฅlla muspekaren รถver ett element eller klicka pรฅ en knapp. Dessa รฅtgรคrder kallas hรคndelser. Kom ihรฅg att metoden app.exec_() รถverfรถr kontrollen till Qt hรคndelse-slinga. Detta รคr vad hรคndelseslingan รคr till fรถr: att lyssna efter hรคndelser och utfรถra รฅtgรคrder som svar.
Nรคrhelst en hรคndelse intrรคffar, som att en anvรคndare klickar pรฅ en knapp, hรถjer motsvarande Qt-widget en signal. Dessa signaler kan kopplas till python-funktioner (som dialogfunktionen i detta exempel) sรฅ att funktionen exekveras nรคr en signal triggas. Dessa funktioner kallas spelautomater pรฅ Qt-sprรฅk.
Dรคrefter รคr den grundlรคggande syntaxen fรถr att trigga en slotfunktion som svar pรฅ signalen frรฅn en hรคndelse som fรถljer
widget.signal.connect(slot)
Vilket betyder att nรคr en signal utlรถses av en widget, den anslutna slits funktionen kommer att kรถras. Sammanfattningsvis anvรคnds signaler och slots av Qt fรถr att kommunicera mellan objekt och underlรคtta รฅteranvรคndbarhet och interaktivitet av komponenter.
Nu nรคr du vet hur man kapslar widgets och implementerar interaktioner med hjรคlp av signaler och slots, hรคr รคr en lista med anvรคndbara widgets och andra klasser som du kan anvรคnda i dina PyQt-appar.
Komponenter och widgets
Det finns ett stort antal widgets tillgรคngliga i PyQt fรถr att skapa GUI-appar. Men med PyQt5 har det skett en omblandning av klasser till olika moduler och revisioner i licenserna.
Dรคrfรถr รคr det avgรถrande att ha en รถverblick รถver strukturen i PyQt5. I det hรคr avsnittet kommer du att se hur PyQt5 รคr organiserat internt och lรคra dig om de olika modulerna, biblioteken och API-klasserna som tillhandahรฅlls av PyQt5.
PyQt5 Katalogstruktur
Dessa รคr de grundlรคggande modulerna som anvรคnds av Pythons Qt-bindning, specifikt PyQt5.
- Qt: Den kombinerar alla klasser/moduler som nรคmns nedan till en enda modul. Det รถkar avsevรคrt minnet som anvรคnds av applikationen. Det รคr dock enklare att hantera ramverket genom att bara importera en modul.
- QtCore: Innehรฅller de icke-grafiska kรคrnklasserna som anvรคnds av andra moduler. Det รคr hรคr Qt-hรคndelseloopen, signaler och slot-anslutning etc. implementeras.
- QtWidgets: Innehรฅller de flesta widgets som finns tillgรคngliga i Pyqt5.
- QtGui: Innehรฅller GUI-komponenter och utรถkar QtCore-modulen.
- QtNetwork: Innehรฅller klasser som anvรคnds fรถr att implementera nรคtverksprogrammering genom Qt. Den stรถder TCP-servrar, TCP-sockets, UDP-sockets, SSL-hantering, nรคtverkssessioner och DNS-sรถkningar.
- QtMultimedia ger multimediafunktionalitet pรฅ lรฅg nivรฅ.
- QtSql: implementerar databasintegration fรถr SQL-databaser. Stรถder ODBC, MySQL, Oracle, SQLiteoch PostgreSQL.
PyQt5-widgets
Hรคr รคr en lista รถver de mest anvรคnda widgetarna i PyQt5
- QLineEdit: Detta รคr ett inmatningsfรคlt som tillรฅter en textrad att skrivas in av anvรคndaren.
line = QLineEdit()
- QRadioButton: Detta รคr ett inmatningsfรคlt med en valbar knapp, liknande radioknapparna i html.
rad = QRadioButton("button title") rad.setChecked(True) #to select the button by default.
- QComboBox: Den anvรคnds fรถr att visa en rullgardinsmeny med en lista รถver valbara objekt.
drop = QComboBox(w) drop.addItems(["item one", "item two", "item three"])
- QCheckBox: Visar en valbar fyrkantig ruta framfรถr etiketten som รคr markerad om den รคr markerad, liknande alternativknappar.
check = QCheckBox("button title")
- QMenuBar: den visar en horisontell menyrad รถverst i ett fรถnster. Du kan bara lรคgga till objekt av klassen QMenu till denna stapel. Dessa QMenu-objekt kan dessutom innehรฅlla strรคngar, QAction-objekt eller andra QMenu-objekt.
- QToolBar: Det รคr en horisontell stapel eller ruta som kan flyttas inom fรถnstret. Den kan innehรฅlla knappar och andra widgets.
- QTab: det anvรคnds fรถr att dela upp innehรฅllet i ett fรถnster i flera sidor som kan nรฅs via olika flikar ovanpรฅ widgeten. Den bestรฅr av tvรฅ sektioner: flikfรคltet och fliksidan.
- QScrollBar: Den anvรคnds fรถr att skapa rullningslister som lรฅter anvรคndaren rulla upp och ner i ett fรถnster. Den bestรฅr av ett rรถrligt skjutreglage, ett skjutreglage och tvรฅ knappar fรถr att rulla skjutreglaget uppรฅt eller nedรฅt.
scroll = QScrollBar()
- QSplitter: Splittrar anvรคnds fรถr att separera innehรฅllet i ett fรถnster sรฅ att widgetarna grupperas korrekt och inte verkar rรถriga. QSplitter รคr en av de primรคra layouthanterarna som finns i PyQt5 och anvรคnds fรถr att dela upp innehรฅllet bรฅde horisontellt och vertikalt.
- QDock: En dockningswidget รคr ett underfรถnster med tvรฅ egenskaper:
- Den kan flyttas inom huvudfรถnstret och
- Den kan dockas utanfรถr fรถrรคldrafรถnstret till en annan plats pรฅ skรคrmen.
Layouter och teman
I de tidigare PyQt5-exemplen har du bara anvรคnt metoderna move() och resize() fรถr att stรคlla in positionerna fรถr widgets i ditt GUI.
PyQt har dock en robust layouthanteringsmotor som kan anvรคndas fรถr att skapa avancerade anvรคndargrรคnssnitt fรถr applikationer. I det hรคr avsnittet kommer du att lรคra dig om tvรฅ viktiga klasser som anvรคnds i Qt fรถr att skapa och hantera layouter.
- QBoxLayout
- QGridLayout
QBoxLayout
QBoxLayout anvรคnds fรถr att justera layoutens underordnade widgets i en horisontell eller vertikal rad. De tvรฅ intresseklasserna som รคrver frรฅn QBoxLayouten รคr:
- QHBoxLayout: anvรคnds fรถr att rada de underordnade widgetarna horisontellt.
- QVBoxLayout: anvรคnds fรถr att rada de underordnade widgetarna vertikalt.
Till exempel รคr det sรฅ hรคr tre knappar รคr i linje med QHBoxLayouten kommer att se ut.
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_())
Och sรฅ hรคr kommer de att se ut i QVBoxLayout.
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_())
Den enda funktionen som behรถver nรฅgon fรถrklaring vid det hรคr laget รคr metoden addWidget(). Den anvรคnds fรถr att infoga widgets i HBox eller VBox layout. Det anvรคnds ocksรฅ i andra layouter dรคr det tar ett annat antal parametrar som du kommer att se i nรคsta avsnitt. Widgetarna kommer att visas i layouten i den ordning som du infogar dem.
QGridLayout
QGridLayout anvรคnds fรถr att skapa grรคnssnitt dรคr widgetarna รคr upplagda i form av ett rutnรคt (som en matris eller 2D-array). Fรถr att infoga element i en rutnรคtslayout kan du anvรคnda matrisrepresentationen fรถr att definiera antalet rader och kolumner i rutnรคtet samt positionen fรถr dessa element.
Till exempel, fรถr att skapa ett 3*3 rutnรคt (dvs ett rutnรคt med tre rader och tre kolumner), skriver du fรถljande 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_())
Detta kommer att vara utgรฅngen:
Metoden addWidget() I rutnรคtslayouten tar dessa argument:
- Widgetobjektet som du vill lรคgga till i rutnรคtet
- Objektets x-koordinat
- Objektets y-koordinat
- Radintervallet (standard =0)
- Kolomfรฅnget (standard=0)
Fรถr att fรถrstรฅ det bรคttre kan du infoga varje widget manuellt som visas nedan
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_())
Sรฅ hรคr kommer rutnรคtet att se ut:
Du kan ocksรฅ skicka parametrarna rowspan och colspan till addWidget() fรถr att spรคnna รถver mer รคn en rad eller kolumn.
Till exempel,
grid.addWidget(QPushButton("Button five"),2,0,1,0)
Detta skapar en knapp som strรคcker sig รถver bรฅda kolumnerna.
teman
PyQt5 kommer med nรฅgra inbyggda teman som du kan anvรคnda i dina appar. De setStyle() metod som anropas pรฅ QApplication-instansen anvรคnds fรถr att stรคlla in ett sรคrskilt tema fรถr din applikation.
Om du till exempel lรคgger till fรถljande kodrad kommer temat fรถr din applikation att รคndras frรฅn standard till Fusion
app.setStyle("Fusion")
Sรฅ hรคr kommer det fรถregรฅende exemplet att se ut i Fusion Theme
En annan anvรคndbar funktion fรถr att temaisera dina appar รคr metoden setPalette(). Hรคr รคr koden fรถr att รคndra fรคrgen pรฅ olika widgets med 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_())
Hรคr รคr resultatet.
Fรถr att anvรคnda metoden setPalette() mรฅste du fรถrst definiera en palett. Detta gรถrs genom att skapa ett objekt av klassen QPalette.
qp = QPalette()
Lรคgg mรคrke till att QPalette-klassen tillhรถr QtGui-modulen och du mรฅste importera den fรถr att detta ska fungera. Nรคr du har skapat QPalette-objektet anvรคnder du metoden setColor() fรถr att skicka namnet pรฅ en widget vars fรคrg du vill รคndra och fรคrgen du vill ska stรคllas in.
qp.setColor(QPalette.Window, Qt.black)
Detta kommer att รคndra fรคrgen pรฅ fรถnstret till svart. Nรคr du har definierat ditt fรคrgschema, anvรคnd funktionen setPalette() fรถr att tillรคmpa paletten pรฅ din applikation.
app.setPalette(qp)
Det รคr allt du behรถver gรถra om du vill skapa nรฅgra grundlรคggande teman fรถr din app. PyQt lรฅter dig ocksรฅ anvรคnda stilmallar fรถr att definiera utseendet pรฅ dina widgets. Om du รคr bekant med CSS kan du enkelt definiera avancerade stilar fรถr din app med hjรคlp av Qt Style Sheets.
Sammanfattning
- PyQt รคr pytonbindningen fรถr C++ UI-ramverk, Qt.
- PyQt4 och PyQt5 รคr de tvรฅ huvudversionerna utvecklade av Riverbank Computing.
- Huvudmodulerna i PyQt-ramverket รคr:
- Qt
- QtCore
- QtWidgets
- QtGui
- QtSql
- QtNetwork
- PyQt stรถder olika widgets som:
- Knappar
- Textetiketter
- Textfรคlt
- Radioknappar och kryssrutor
- Verktygsfรคlt och menyfรคlt
- Webbkit
- Flikar
- Docks
- I PyQt implementeras interaktivitet med hjรคlp av signaler och slitsar.
- An hรคndelse รคr en รฅtgรคrd som utfรถrs av en anvรคndare i GUI (som att klicka pรฅ en knapp).
- A signal hรถjs av motsvarande widget nรคr en hรคndelse intrรคffar pรฅ den.
- A slits รคr en funktion som รคr kopplad till signalen och kรถrs nรคr signalen hรถjs.
- PyQt har en robust layoutmotor och stรถder avancerad layoutdesign och hantering. Dessa รคr tvรฅ ofta anvรคnda layoutscheman i PyQt:
- Box Layout
- Grid layout
- PyQt-designern lรฅter dig skapa anpassade teman fรถr GUI-applikationer och har inbyggt stรถd fรถr stilmallar.
- qtcreator Python kan anvรคndas fรถr att skapa anvรคndargrรคnssnitt sรฅvรคl som fristรฅende applikationer.












