PyQt5-Tutorial mit Beispielen: Erstellen Python GUIs mit Qt
โก Intelligente Zusammenfassung
PyQt ist ein Python Die Bindung fรผr das plattformรผbergreifende Qt-Widget-Toolkit ermรถglicht Entwicklern die Erstellung nativer Desktop-GUIs. Sie umfasst mehr als sechshundert C++ Klassen, die Fenster, Schaltflรคchen, Layouts, Signale, Slots und Designs abdecken fรผr Windows, macOSund Linux.

Die folgenden Abschnitte fรผhren Sie von den Grundlagen von PyQt รผber die Installation, Kern-Widgets, Layouts und Themes bis hin zu lauffรคhigen Beispielen.
Was ist PyQt?
PyQt ist eine Python Die Anbindung an das Open-Source-Widget-Toolkit Qt, das auch als plattformรผbergreifendes Anwendungsentwicklungsframework fungiert, ist ein beliebtes Framework. C++ Framework zum Schreiben von GUI-Anwendungen fรผr alle gรคngigen Desktop-, Mobil- und Embedded-Plattformen (es unterstรผtzt Linux, Windows, macOS, Android, iOS, Raspberry Pi und mehr).
PyQt ist eine freie Software, die von Riverbank Computing, einem Unternehmen mit Sitz in England, entwickelt und gepflegt wird, wรคhrend Qt von einer finnischen Firma namens The Qt Company entwickelt wird.
Merkmale von PyQt
Hier sind wichtige Funktionen von PyQt:
PyQt besteht aus mehr als sechshundert Klassen, die eine Reihe von Funktionen abdecken, wie zum Beispiel:
- Grafische Benutzeroberflรคchen
- SQL-Datenbanken
- Web-Toolkits
- XML-Verarbeitung
- Netzwerken
Diese Funktionen lassen sich kombinieren, um sowohl fortschrittliche Benutzeroberflรคchen als auch eigenstรคndige Anwendungen zu erstellen. Viele groรe Unternehmen verschiedenster Branchen nutzen Qt. Beispiele hierfรผr sind LG, Mercedes, AMD, Panasonic und Harman.
PyQt-Versionen
PyQt ist in zwei Editionen erhรคltlich: PyQt4 und PyQt5. PyQt4 stellt den notwendigen Code zur Anbindung der Qt-Framework-Versionen 4.x und 5.x bereit, wรคhrend PyQt5 nur die Version 5.x unterstรผtzt. Daher ist PyQt5 nicht abwรคrtskompatibel mit den veralteten Modulen der รคlteren Version. In diesem PyQt-GUI-Tutorial wird PyQt5 fรผr die Beispieldemonstration verwendet. Neben diesen beiden Versionen bietet Riverbank Computing auch PyQt3D an. Python Bindungen fรผr das Qt3D-Framework. Qt3D ist ein Anwendungsframework zur Erstellung von Echtzeit-Simulationssystemen mit 2D/3D-Rendering.
So installieren Sie PyQt5
In diesem PyQt5-Tutorial sehen wir die zwei Mรถglichkeiten, PyQt zu installieren:
- Verwenden von Wheel-Dateien
- Erstellen und Installieren aus der Quelle
Qt (ausgesprochen โcuteโ) ist ein komplexes System und die PyQt-Codebasis enthรคlt kompilierte C++ und Python Der Quellcode ist im Inneren komplex. Daher ist es im Vergleich zu anderen Systemen ein komplizierter Prozess, das Programm aus dem Quellcode zu erstellen und zu installieren. Python Bibliotheken. PyQt5 lรคsst sich jedoch problemlos mithilfe von Wheels installieren.
Installation mit Rรคdern
Rรคder sind der neue Standard Python Verpackungs- und Verteilungsformat. Einfach ausgedrรผckt ist ein Wheel ein ZIP-Archiv mit einem speziellen Namen und .whl Dateierweiterung. Wheels kรถnnen mit pip installiert werden (Python's Paketmanager), der standardmรครig in den neuesten Versionen von enthalten ist Python.
Also, wenn Sie haben Python 3.4 oder hรถher installiert ist, haben Sie bereits pip. Wenn Sie jedoch eine รคltere Version von PythonSie mรผssen pip herunterladen und installieren, bevor Sie fortfahren. Eine Anleitung dazu finden Sie unter diesem Link: https://pypi.org/project/pip/.
So installieren Sie PyQt5:
Schritt 1) รffnen Sie die Eingabeaufforderung.
รffnen Sie die Eingabeaufforderung oder PowerShell in Ihrem Windows Maschine.
Schritt 2) Geben Sie Folgendes ein.
pip install PyQt5
Schritt 3) Installation erfolgreich.
In diesem Schritt in diesem PyQt5-Tutorial wird das PyQt5-whl-Paket (ca. 50 MB) heruntergeladen und auf Ihrem System installiert.
Alternativ kรถnnen Sie auch eine herunterladen Windows Binรคrdatei fรผr die Version von Python auf Ihrem Computer installiert.
Sobald der Vorgang abgeschlossen ist, fahren Sie mit dem nรคchsten Abschnitt dieses PyQt5-Tutorials fort, um Ihre erste GUI-App zu schreiben.
Grundlegendes PyQt Concepts und Programme
Nachdem Sie PyQt5 erfolgreich auf Ihrem Computer installiert haben, kรถnnen Sie nun schreiben Python GUI-Anwendungen.
Beginnen wir in diesem PyQt5-Tutorial mit einer einfachen Anwendung, die ein leeres Fenster auf Ihrem Bildschirm anzeigt.
Zรผnde deinen Python IDLE und geben Sie Folgendes ein:
Anwendung 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_())
Speichern Sie die Datei als app.py (der Name ist egal) und drรผcken Sie F5, um das Programm auszufรผhren. Alternativ kรถnnen Sie die gespeicherte Datei auch einfach doppelklicken, um die Anwendung zu starten. Wenn Sie alles richtig gemacht haben, รถffnet sich ein neues Fenster mit dem Titel Guru99, wie unten dargestellt.
Super! Es funktioniert. Es ist zwar noch nicht viel, aber es reicht, um die Grundlagen zu verstehen. In diesem PyQt-Tutorial sehen wir uns nun im Detail an, was jede einzelne Zeile Ihres Programms bewirkt.
from PyQt5.QtWidgets import QApplication, QWidget
Diese Anweisung importiert alle Module, die Sie zum Erstellen einer GUI benรถtigen, in den aktuellen Namespace. Das Modul QtWidgets enthรคlt alle wichtigen Widgets, die Sie in diesem verwenden werden. Python Qt-Tutorial.
app = QApplication(sys.argv)
Hier erstellen Sie ein Objekt der QApplication-Klasse. Dieser Schritt ist fรผr PyQt5 eine Notwendigkeit; Jede UI-App muss eine Instanz von QApplication erstellen, als eine Art Einstiegspunkt in die App. Wenn Sie es nicht erstellen, werden Fehler angezeigt.
sys.argv ist die Liste der Befehlszeilenparameter, die Sie an die Anwendung รผbergeben kรถnnen, wenn Sie sie รผber die Shell starten oder die Schnittstelle automatisieren.
In diesem PyQt5-Beispiel haben Sie keine Argumente an QApplication รผbergeben. Daher kรถnnen Sie es auch durch den unten stehenden Code ersetzen und mรผssen das Modul sys nicht einmal importieren.
app = QApplication([])
w = QWidget()
Als nรคchstes erstellen wir ein Objekt der Klasse QWidget. QWidget ist die Basisklasse aller UI-Objekte in Qt, und praktisch alles, was Sie in einer App sehen, ist ein Widget. Dazu gehรถren Dialoge, Texte, Schaltflรคchen, Leisten usw. Die Funktion, mit der Sie komplexe Benutzeroberflรคchen entwerfen kรถnnen, besteht darin, dass die Widgets verschachtelt werden kรถnnen, d. h. Sie kรถnnen ein Widget in einem Widget haben, das sich wiederum in einem weiteren Widget befindet. Im nรคchsten Abschnitt werden Sie dies in Aktion sehen.
w.resize(300,300)
Mit der Resize-Methode der QWidget-Klasse kรถnnen Sie die Abmessungen jedes Widgets festlegen. In diesem Fall haben Sie die Fenstergrรถรe auf 300 x 300 Pixel geรคndert.
Hierbei sollten Sie beachten, dass Widgets verschachtelt werden kรถnnen; das รคuรerste Widget (d. h. das Widget ohne รผbergeordnetes Element) wird als Fenster bezeichnet.
w.setWindowTitle("Guru99")
Die Methode `setWindowTitle()` ermรถglicht es Ihnen, eine Zeichenkette als Argument zu รผbergeben, wodurch der Titel des Fensters auf diese Zeichenkette gesetzt wird. Im PyQt5-Beispiel wird in der Titelleiste Folgendes angezeigt: Guru99
w.show()
show() zeigt einfach das Widget auf dem Monitorbildschirm an.
sys.exit(app.exec_())
Die Methode app.exec_() startet die Qt/C++ Ereignisschleife. Wie Sie wissen, ist PyQt grรถรtenteils in C++ und nutzt den Ereignisschleifenmechanismus zur parallelen Ausfรผhrung. `app.exec_()` รผbergibt die Steuerung an Qt, welches die Anwendung erst beendet, wenn der Benutzer sie รผber die grafische Benutzeroberflรคche schlieรt. Daher beendet Strg+C die Anwendung nicht wie in anderen Anwendungen. Python Programme. Da Qt die Kontrolle รผber die Anwendung hat, Python Ereignisse werden nur verarbeitet, wenn sie innerhalb der Anwendung definiert sind. Beachten Sie auรerdem, dass die Methode `exec` einen Unterstrich im Namen trรคgt; dies liegt daran, dass `exec()` bereits ein Schlรผsselwort war. Python und der Unterstrich lรถst den Namenskonflikt.
Jenseits leerer Fenster
Im vorherigen Abschnitt haben Sie gesehen, wie man ein einfaches Widget in Qt erstellt. Jetzt ist es an der Zeit, komplexere Benutzeroberflรคchen zu entwickeln, mit denen die Benutzer interagieren kรถnnen. Also, ran an die Arbeit! IDLE und schreiben Sie Folgendes.
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_())
Speichern Sie die Datei unter dem Namen appone.py oder einem beliebigen anderen Namen und drรผcken Sie F5, um das Programm auszufรผhren. Wenn Sie keine Fehler gemacht haben, IDLE รถffnet ein neues Fenster mit etwas Text und einer Schaltflรคche, wie unten gezeigt.
- Sobald Sie im ersten Fenster auf die Schaltflรคche klicken, wird ein neues Nachrichtenfeld mit dem von Ihnen geschriebenen Text geรถffnet.
- Sie kรถnnen jetzt auf die Schaltflรคche โDetails ausblenden/Details anzeigenโ klicken, um die Sichtbarkeit von zusรคtzlichem Text umzuschalten.
Wie Sie sehen kรถnnen, wurde, da wir im Meldungsfeld keinen Fenstertitel festgelegt hatten, ein Standardtitel von Python sich.
Nachdem es nun funktioniert, schauen wir uns den zusรคtzlichen Code an, den Sie dem vorherigen PyQt5-Beispiel hinzugefรผgt haben.
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
Dadurch werden einige weitere Widgets importiert, die Sie in PyQt5-Beispielen verwendet haben, nรคmlich QLabel, QPushButton und 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_()
Hier haben Sie eine Methode mit dem Namen โDialogโ definiert, die ein Meldungsfeld-Widget erstellt und den Schaltflรคchen und anderen Feldern Text hinzufรผgt.
Die Dialogmethode wird vom Hauptblock des Programms aufgerufen, wenn eine Schaltflรคche in einem bestimmten Widget gedrรผckt wird (in diesem Fall der BTN-PushButton). Das auf dieser Schaltflรคche ausgelรถste Klickereignis fรผhrt zur Ausfรผhrung dieser Funktion. Eine solche Funktion wird in Qt als Slot bezeichnet, und Sie werden mehr darรผber erfahren Signale und Slots in den nรคchsten Absรคtzen.
if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle("Guru99")
Dies ist der Hauptteil der App und wie im vorherigen Beispiel beginnen Sie mit der Erstellung einer Instanz von QApplication, gefolgt von einem einfachen Widget, d. h. einer Instanz von QWidget.
label = QLabel(w)
btn = QPushButton(w)
Sie haben dieser Anwendung zwei neue Widgets hinzugefรผgt: QLabel und QPushButton. QLabel wird zum Drucken von nicht bearbeitbarem Text oder Platzhaltern innerhalb eines Widgets verwendet, wรคhrend QPushButton zum Erstellen einer anklickbaren Schaltflรคche verwendet wird.
Hier ist es wichtig zu beachten, dass Sie beim Erstellen der Label- und BTN-Objekte das Fensterobjekt (w) an die Konstruktoren von QLabel und QPushButton รผbergeben. So funktioniert die Verschachtelung in PyQt5. Um ein Widget innerhalb eines anderen Widgets zu erstellen, รผbergeben Sie die Referenz des รผbergeordneten Widgets an den Konstruktor des untergeordneten Widgets.
label.move(100,130) btn.move(110,150)
move() wird verwendet, um die Position eines Widgets in Bezug auf sein รผbergeordnetes Widget festzulegen. Im ersten Fall wird die Beschriftung um 100 Pixel nach links und um 130 Pixel nach oben im Fenster verschoben.
Ebenso wird die Schaltflรคche 110 Pixel vom linken und 150 Pixel vom oberen Rand des Fensters entfernt platziert. Dieses Beispiel ist eine grobe Methode zum Erstellen von Layouts und wird im Allgemeinen nicht in der Produktion verwendet. es ist hier nur zu Lernzwecken enthalten. Qt unterstรผtzt verschiedene Layouts, die Sie in den kommenden Abschnitten dieses PyQt-Tutorials ausfรผhrlich sehen werden.
btn.clicked.connect(dialog)
Abschlieรend noch ein Beispiel fรผr Signale und Slots in Qt. In GUI-basierten Anwendungen werden Funktionen basierend auf den Aktionen des Benutzers ausgefรผhrt, beispielsweise beim Bewegen des Mauszeigers รผber ein Element oder beim Klicken auf eine Schaltflรคche. Diese Aktionen werden als Signale und Slots bezeichnet. Veranstaltungen. Denken Sie daran, dass die Methode app.exec_() die Kontrolle an Qt รผbertrรคgt Event Schleife. Dafรผr ist die Ereignisschleife da: um auf Ereignisse zu warten und als Reaktion darauf Aktionen auszufรผhren.
Immer wenn ein Ereignis auftritt, beispielsweise wenn ein Benutzer auf eine Schaltflรคche klickt, lรถst das entsprechende Qt-Widget eine aus Signal. Diese Signale kรถnnen mit verbunden werden Python Funktionen (wie die Dialogfunktion in diesem Beispiel), sodass die Funktion ausgefรผhrt wird, wenn ein Signal ausgelรถst wird. Diese Funktionen werden aufgerufen Slots im Qt-Jargon.
Die grundlegende Syntax zum Auslรถsen einer Slot-Funktion als Reaktion auf ein Ereignissignal lautet wie folgt:
widget.signal.connect(slot)
Das bedeutet, dass immer dann ein Signal wird ausgelรถst durch a Widget, das Verbundene Schloร Funktion wird ausgefรผhrt. Zusammenfassend lรคsst sich sagen, dass Signale und Slots von Qt verwendet werden, um zwischen Objekten zu kommunizieren und die Wiederverwendbarkeit und Interaktivitรคt von Komponenten zu erleichtern.
Nachdem Sie nun wissen, wie Sie Widgets verschachteln und Interaktionen mithilfe von Signalen und Slots implementieren, finden Sie hier eine Liste nรผtzlicher Widgets und anderer Klassen, die Sie in Ihren PyQt-Apps verwenden kรถnnen.
Komponenten und Widgets
In PyQt steht eine groรe Anzahl von Widgets zum Erstellen von GUI-Apps zur Verfรผgung. Mit PyQt5 kam es jedoch zu einer Umgruppierung der Klassen in verschiedene Module und Revisionen in den Lizenzen.
Daher ist es unerlรคsslich, einen รberblick รผber die Struktur von PyQt5 zu haben. In diesem Abschnitt erfahren Sie, wie PyQt5 intern organisiert ist und lernen die verschiedenen Module, Bibliotheken und API-Klassen kennen, die von PyQt5 bereitgestellt werden.
PyQt5-Verzeichnisstruktur
Dies sind die grundlegenden Module von Python's Qt-Bindung, insbesondere PyQt5.
- QtEs fasst alle unten genannten Klassen/Module in einem einzigen Modul zusammen. Dadurch erhรถht sich der Speicherbedarf der Anwendung erheblich. Die Verwaltung des Frameworks wird jedoch durch den Import nur eines Moduls vereinfacht.
- QtCore: Enthรคlt die wichtigsten nichtgrafischen Klassen, die von anderen Modulen verwendet werden. Hier werden die Qt-Ereignisschleife, Signale, Slot-Konnektivitรคt usw. implementiert.
- QtWidgetsEnthรคlt die meisten in PyQt5 verfรผgbaren Widgets.
- QtGui: Enthรคlt GUI-Komponenten und erweitert das QtCore-Modul.
- Qt-Netzwerk: Enthรคlt Klassen, die zur Implementierung der Netzwerkprogrammierung รผber Qt verwendet werden. Es unterstรผtzt TCP-Server, TCP-Sockets, UDP-Sockets, SSL-Verarbeitung, Netzwerksitzungen und DNS-Suchen.
- Qt-Multimedia: bietet grundlegende Multimedia-Funktionen.
- QtSql: implementiert die Datenbankintegration fรผr SQL-Datenbanken. Unterstรผtzt ODBC, MySQL, Oracle, SQLite und PostgreSQL.
PyQt5-Widgets
Hier ist eine Liste der am hรคufigsten verwendeten Widgets in PyQt5:
- QLineEdit: Dies ist ein Eingabefeld, in das der Benutzer eine Textzeile eingeben kann.
line = QLineEdit()
- QRadioButtonDies ist ein Eingabefeld mit einem auswรคhlbaren Button, รคhnlich den Optionsfeldern in HTML.
rad = QRadioButton("button title") rad.setChecked(True) #to select the button by default.
- QComboBox: Wird verwendet, um ein Dropdown-Menรผ mit einer Liste auswรคhlbarer Elemente anzuzeigen.
drop = QComboBox(w) drop.addItems(["item one", "item two", "item three"])
- QCheckBox: Zeigt vor der Beschriftung ein auswรคhlbares quadratisches Kรคstchen an, das bei Auswahl aktiviert wird, รคhnlich wie Optionsfelder.
check = QCheckBox("button title")
- QMenuBarEs zeigt eine horizontale Menรผleiste am oberen Rand eines Fensters an. Dieser Leiste kรถnnen nur Objekte der Klasse QMenu hinzugefรผgt werden. Diese QMenu-Objekte kรถnnen wiederum Zeichenketten, QAction-Objekte oder andere QMenu-Objekte enthalten.
- QToolBar: Es handelt sich um eine horizontale Leiste oder einen horizontalen Bereich, der innerhalb des Fensters verschoben werden kann. Es kann Schaltflรคchen und andere Widgets enthalten.
- QTabEs dient dazu, den Inhalt eines Fensters in mehrere Seiten aufzuteilen, die รผber verschiedene Tabs am oberen Rand des Widgets aufgerufen werden kรถnnen. Es besteht aus zwei Bereichen: der Tab-Leiste und der Tab-Seite.
- QScrollBarEs dient zur Erstellung von Scrollleisten, mit denen der Benutzer innerhalb eines Fensters nach oben und unten scrollen kann. Es besteht aus einem verschiebbaren Schieberegler. track und zwei Tasten zum Hoch- und Runterscrollen des Schiebereglers.
scroll = QScrollBar()
- QSplitter: Splitter werden verwendet, um den Inhalt eines Fensters zu trennen, sodass die Widgets richtig gruppiert sind und nicht รผberladen erscheinen. QSplitter ist einer der primรคren Layout-Handler in PyQt5 und wird zum horizontalen und vertikalen Teilen des Inhalts verwendet.
- QDockEin Dock-Widget ist ein Unterfenster mit zwei Eigenschaften: Es kann innerhalb des Hauptfensters verschoben werden und es kann auรerhalb des รผbergeordneten Fensters an einer anderen Stelle auf dem Bildschirm angedockt werden.
Layouts und Themen
In den vorherigen PyQt5-Beispielen haben Sie nur die Methoden move() und resize() verwendet, um die Positionen von Widgets in Ihrer GUI festzulegen.
PyQt verfรผgt jedoch รผber eine robuste Layout-Management-Engine, mit der sich erweiterte Benutzeroberflรคchen fรผr Anwendungen erstellen lassen. In diesem Abschnitt lernen Sie zwei wichtige Klassen kennen, die in Qt zum Erstellen und Verwalten von Layouts verwendet werden.
- QBoxLayout
- QGridLayout
QBoxLayout
QBoxLayout wird verwendet, um die untergeordneten Widgets des Layouts in einer horizontalen oder vertikalen Reihe auszurichten. Die beiden Interessenklassen, die von Q erbenBoxLayout sind:
- QHBoxLayout: Wird verwendet, um die untergeordneten Widgets horizontal auszurichten.
- QVBoxLayout: Wird verwendet, um die untergeordneten Widgets vertikal anzuordnen.
So sind beispielsweise drei Tasten mit QH ausgerichtetBoxDas Layout wird aussehen.
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_())
Und so werden sie in QV aussehenBoxLayout.
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_())
Die einzige Funktion, die an dieser Stelle einer Erklรคrung bedarf, ist die Methode addWidget(). Es dient zum Einfรผgen von Widgets in das HBox oder V.Box Layout. Es wird auch in anderen Layouts verwendet, in denen es eine andere Anzahl von Parametern benรถtigt, wie Sie im nรคchsten Abschnitt sehen werden. Die Widgets werden im Layout in der Reihenfolge angezeigt, in der Sie sie einfรผgen.
QGridLayout
QGridLayout wird zum Erstellen von Schnittstellen verwendet, in denen die Widgets in Form eines Rasters (wie einer Matrix oder einem 2D-Array) angeordnet sind. Um Elemente in ein Rasterlayout einzufรผgen, kรถnnen Sie die Matrixdarstellung verwenden, um die Anzahl der Zeilen und Spalten im Raster sowie die Position dieser Elemente zu definieren.
Um beispielsweise ein 3*3-Raster (also ein Raster mit drei Zeilen und drei Spalten) zu erstellen, schreiben Sie den folgenden Code:
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_())
Dies wird die Ausgabe sein:
Die Methode addWidget() im Grid-Layout akzeptiert folgende Argumente:
- Das Widget-Objekt, das Sie dem Raster hinzufรผgen mรถchten
- Die x-Koordinate des Objekts
- Die y-Koordinate des Objekts
- Die Zeilenspanne (Standardwert = 0)
- Die Spaltenspanne (Standardwert = 0)
Um es besser zu verstehen, kรถnnen Sie jedes Widget manuell einfรผgen, wie unten gezeigt.
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_())
So wird das Raster aussehen:
Sie kรถnnen auch die Parameter rowspan und colspan an addWidget() รผbergeben, um mehr als eine Zeile oder Spalte zu umfassen.
Zum Beispiel,
grid.addWidget(QPushButton("Button five"),2,0,1,0)
Dadurch wird eine Schaltflรคche erstellt, die sich รผber beide Spalten erstreckt.
Themen
PyQt5 verfรผgt รผber einige integrierte Themes, die Sie in Ihren Apps verwenden kรถnnen. Der setStyle() Die auf der QApplication-Instanz aufgerufene Methode wird verwendet, um ein bestimmtes Thema fรผr Ihre Anwendung festzulegen.
Wenn Sie beispielsweise die folgende Codezeile hinzufรผgen, รคndert sich das Design Ihrer Anwendung von โStandardโ auf โFusionโ.
app.setStyle("Fusion")
So sieht das vorherige Beispiel im Fusion-Design aus.
Eine weitere nรผtzliche Funktion zum Anpassen des Designs Ihrer Apps ist die Methode `setPalette()`. Hier ist der Code zum รndern der Farbe verschiedener Widgets mithilfe von `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_())
Hier ist das Ergebnis.
Um die setPalette()-Methode verwenden zu kรถnnen, mรผssen Sie zunรคchst eine Palette definieren. Dies geschieht durch die Erstellung eines Objekts der QPalette-Klasse.
qp = QPalette()
Beachten Sie, dass die Klasse `QPalette` zum Modul `QtGui` gehรถrt und Sie diese importieren mรผssen, damit dies funktioniert. Nachdem Sie das `QPalette`-Objekt erstellt haben, verwenden Sie die Methode `setColor()`, um den Namen des Widgets, dessen Farbe Sie รคndern mรถchten, und die gewรผnschte Farbe anzugeben.
qp.setColor(QPalette.Window, Qt.black)
Dadurch wird die Fensterfarbe auf Schwarz geรคndert. Nachdem Sie Ihr Farbschema definiert haben, verwenden Sie die Funktion `setPalette()`, um die Palette auf Ihre Anwendung anzuwenden.
app.setPalette(qp)
Das ist alles, was Sie tun mรผssen, wenn Sie einige grundlegende Themen fรผr Ihre App erstellen mรถchten. Mit PyQt kรถnnen Sie auch Stylesheets verwenden, um das Aussehen Ihrer Widgets zu definieren. Wenn Sie mit CSS vertraut sind, kรถnnen Sie mithilfe von Qt Style Sheets ganz einfach erweiterte Stile fรผr Ihre App definieren.












