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.













