PyQt5-handledning med exempel: Skapa Python GUI:er med Qt
โก Smart sammanfattning
PyQt รคr en Python bindning fรถr plattformsoberoende Qt-widgetverktygslรฅdan, vilket lรฅter utvecklare bygga inbyggda skrivbordsgrรคnssnitt. Den omfattar mer รคn sexhundra C++ klasser som tรคcker fรถnster, knappar, layouter, signaler, platser och teman fรถr Windows, macOSoch Linux.

Avsnitten nedan tar dig frรฅn grunderna i PyQt till installation, kรคrnwidgetar, layouter och teman med kรถrbara exempel.
Vad รคr PyQt?
PyQt รคr en Python bindning av widget-toolkit med รถppen kรคllkod Qt, som ocksรฅ fungerar som ett plattformsoberoende applikationsutvecklingsramverk. Qt รคr ett populรคrt C++ ramverk fรถr att skriva GUI-applikationer fรถr alla stรถrre stationรคra, mobila och inbรคddade plattformar (det stรถder Linux, Windows, macOS, Android, iOS, Raspberry Pi och mer).
PyQt รคr fri programvara utvecklad och underhรฅllen av Riverbank Computing, ett fรถretag baserat i England, medan Qt รคr utvecklad av ett finskt fรถretag som heter The Qt Company.
Funktioner i PyQt
Hรคr รคr viktiga funktioner i PyQt:
PyQt bestรฅr av mer รคn sexhundra klasser som tรคcker en rad funktioner som:
- 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 och Harman.
PyQt-versioner
PyQt finns i tvรฅ utgรฅvor, PyQt4 och PyQt5. PyQt4 tillhandahรฅller kod fรถr att binda 4.x- och 5.x-versionerna 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 PyQt GUI-handledning kommer PyQt5 att anvรคndas fรถr demonstration av exempel. Fรถrutom dessa tvรฅ versioner tillhandahรฅller Riverbank Computing รคven PyQt3Dโden Python bindningar 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รคllkoden jรคmfรถrt med andra Python bibliotek. 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 fortsรคtter. Du kan sรถka efter instruktioner pรฅ den hรคr lรคnken: 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 har installerat PyQt5 pรฅ din dator รคr du redo att skriva Python GUI-applikationer.
Lรฅt oss bรถrja med en enkel app i den hรคr PyQt5-handledningen som visar ett tomt fรถnster pรฅ skรคrmen.
Tรคnd 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 den som app.py (namnet spelar ingen roll) och tryck pรฅ F5 fรถr att kรถra programmet. Alternativt kan du bara dubbelklicka pรฅ din sparade fil fรถr att starta programmet. Om du har gjort allt rรคtt รถppnas ett nytt fรถnster med titeln. Guru99 som visas nedan.
Toppen! Det fungerar. Det รคr inte mycket, men det rรคcker fรถr att fรถrstรฅ grunderna. Nu i den hรคr PyQt-handledningen ska vi se i detalj vad varje rad 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 det hรคr PyQt5-exemplet skickade du inga argument till QApplication. Dรคrfรถr kan du รคven ersรคtta det med koden nedan och slipper 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 widgetar kan kapslas tillsammans; 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 stรคller in fรถnstrets titel till den strรคng du skickar. I PyQt5-exemplet kommer titelfรคltet att visas 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 endast avslutar applikationen nรคr anvรคndaren stรคnger den frรฅn det grafiska grรคnssnittet. Det รคr dรคrfรถr ctrl+c inte avslutar applikationen som i andra Python program. Eftersom Qt har kontroll รถver appen, Python Hรคndelser bearbetas inte om vi inte konfigurerar dem inuti applikationen. Observera ocksรฅ att exec-metoden har ett understreck i namnet; detta beror pรฅ att exec() redan var ett nyckelord i Python och understrecket lรถser namngivningskonflikten.
Bortom tomma fรถnster
I fรถregรฅende avsnitt sรฅg du hur man skapar en enkel widget i Qt. Nu รคr det dags att skapa nรฅgra mer komplicerade grรคnssnitt som anvรคndarna verkligen kan interagera med. ร terigen, starta 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 annat du gillar 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 angett 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 kod som du har lagt till i det fรถregรฅende 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 appens huvuddel och, precis som i fรถregรฅende exempel, bรถrjar du med att skapa en instans av QApplication fรถljt av en enkel widget, dvs. 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 platser 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 utlรถsa en slotfunktion som svar pรฅ signalen frรฅn en hรคndelse fรถljande:
widget.signal.connect(slot)
Detta innebรคr att nรคrhelst 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 รถversikt รถver PyQt5:s struktur. I det hรคr avsnittet fรฅr du 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.
- QtDen kombinerar alla klasser/moduler som nรคmns nedan till en enda modul. Den รถkar avsevรคrt minnesanvรคndningen fรถr 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.
- QtWidgetsInnehรฅller de flesta widgets som finns 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: tillhandahรฅller 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()
- QRadioButtonDetta รค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")
- QMenuBarDen visar en horisontell menyrad hรถgst upp i ett fรถnster. Du kan bara lรคgga till objekt av QMenu-klassen i den hรคr raden. Dessa QMenu-objekt kan vidare 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.
- QTabDen anvรคnds fรถr att dela upp innehรฅllet i ett fรถnster i flera sidor som kan nรฅs via olika flikar hรถgst upp i widgeten. Den bestรฅr av tvรฅ sektioner: flikfรคltet och fliksidan.
- QScrollBarDen 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 reglage, ett reglage track och tvรฅ knappar fรถr att rulla reglaget 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.
- QDockEn dockningswidget รคr ett underfรถnster med tvรฅ egenskaper: den kan flyttas inom huvudfรถnstret och den kan dockas utanfรถr det รถverordnade fรถ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
- Radspannet (standard = 0)
- Kolumnspannet (standard = 0)
Fรถr att fรถrstรฅ det bรคttre kan du manuellt infoga varje widget enligt 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 รคndras programmets tema frรฅn standard till Fusion.
app.setStyle("Fusion")
Sรฅ hรคr kommer det fรถregรฅende exemplet att se ut i Fusion-temat.
En annan anvรคndbar funktion fรถr att temange dina appar รคr metoden setPalette(). Hรคr รคr koden fรถr att รคndra fรคrgen pรฅ olika widgetar med hjรคlp av 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()
Observera 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 den fรคrg du vill ha instรคlld.
qp.setColor(QPalette.Window, Qt.black)
Detta รคndrar fรถnstrets fรคrg till svart. Nรคr du har definierat ditt fรคrgschema anvรคnder du funktionen setPalette() fรถr att tillรคmpa paletten pรฅ ditt program.
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.












