PyQt5-Tutorial mit Beispielen:Entwerfen Sie eine GUI mit PyQt in Python
Was ist PyQt?
PyQt ist eine Python-Anbindung des Open-Source-Widget-Toolkits Qt, das auch als plattformübergreifendes Anwendungsentwicklungs-Framework fungiert. Qt ist ein beliebtes C++-Framework zum Schreiben von GUI-Anwendungen für alle wichtigen Desktop-, Mobil- und Embedded-Plattformen (unterstützt Linux, Windows, MacOS, Android, iOS, Raspberry Pi und mehr).
PyQt ist eine kostenlose Software, die von Riverbank Computing, einem in England ansässigen Unternehmen, entwickelt und gepflegt wird, während Qt von einer finnischen Firma namens The Qt Company entwickelt wird.
In diesem PyQt5-Tutorial lernen Sie:
- Funktionen von PyQT
- PyQt-Versionen
- So installieren Sie PyQt5
- Grundlegende PyQt-Konzepte und -Programme
- Komponenten und Widgets
- Themen
Funktionen von PyQT
Hier sind wichtige Funktionen von PyQt:
Lernen Sie PyQt kennen, das aus mehr als 600 Klassen besteht, die eine Reihe von Funktionen wie
abdecken- Grafische Benutzeroberflächen
- SQL-Datenbanken
- Web-Toolkits
- XML-Verarbeitung
- Vernetzung
Diese Funktionen können kombiniert werden, um erweiterte Benutzeroberflächen sowie eigenständige Anwendungen zu erstellen. Viele große Unternehmen aus allen Branchen verwenden Qt. Einige Beispiele sind LG, Mercedes, AMD, Panasonic, Harman usw.
PyQt-Versionen
PyQt ist in zwei Editionen verfügbar, PyQt4 und PyQt5. PyQt4 bietet Glue-Code zum Binden von 4.x- und 5.x-Versionen des Qt-Frameworks, während PyQt5 nur eine Bindung für die 5.x-Versionen bereitstellt. Daher ist PyQt5 nicht abwärtskompatibel mit den veralteten Modulen der älteren Version. In diesem Qt-GUI-Tutorial wird PyQt5 für die Demonstration von Beispielen verwendet. Abgesehen von diesen beiden Versionen,
Riverbank Computing bietet auch PyQt3D – die Python-Bindungen für das Qt3D-Framework. Qt3D ist ein Anwendungsframework zum Erstellen von Echtzeit-Simulationssystemen mit 2D/3D-Rendering.
Wie installiert man PyQt5
In diesem PyQt5-Tutorial werden wir die zwei Möglichkeiten zur Installation von PyQt sehen:
- Wheel-Dateien verwenden
- Bauen und Installieren aus der Quelle
Qt (ausgesprochen süß) ist ein komplexes System, und die PyQt-Codebasis enthält kompilierten C++- und Python-Code unter der Haube. Infolgedessen ist es im Vergleich zu anderen Python-Bibliotheken ein komplizierter Prozess, es aus der Quelle zu erstellen und zu installieren. Sie können PyQt5 jedoch problemlos mithilfe von Rädern installieren.
Installation mit Rädern
Wheels sind das neue standardmäßige Verpackungs- und Verteilungsformat von Python. Einfach gesagt ist ein Rad ein ZIP-Archiv mit einem speziellen Namen und .whl Dateierweiterung. Wheels kann mit pip (dem Paketmanager von Python) installiert werden, der standardmäßig in den neueren Versionen von Python enthalten ist.
Wenn Sie also Python 3.4 oder höher installiert haben, haben Sie Pip bereits. Wenn Sie jedoch eine ältere Version von Python verwenden, müssen Sie pip herunterladen und installieren, bevor Sie fortfahren. Sie können unter diesem Link nach Anweisungen dafür suchen:https://pypi.org/project/pip/.
Um PyQt5 zu installieren,
Schritt 1) Eingabeaufforderung öffnen.
Öffnen Sie die Eingabeaufforderung oder PowerShell auf Ihrem Windows-Rechner.
Schritt 2) Geben Sie Folgendes ein.
pip install PyQt5
Schritt 3) Installation erfolgreich.
Dieser Schritt in diesem PyQt5-Tutorial lädt das PyQt5 whl-Paket (ca. 50 MB) herunter und installiert es auf Ihrem System.
Alternativ können Sie auch eine Windows-Binärdatei für die auf Ihrem Computer installierte Python-Version herunterladen.
Sobald es fertig ist, fahren Sie mit dem nächsten Abschnitt in diesem PyQt5-Tutorial fort, um Ihre erste GUI-App zu schreiben.
Grundlegende PyQt-Konzepte und -Programme
Nachdem Sie PyQt5 nun erfolgreich auf Ihrem Computer installiert haben, können Sie Python-GUI-Designanwendungen schreiben.
Beginnen wir mit einer einfachen App in diesem PyQt5-Tutorial, die ein leeres Fenster auf Ihrem Bildschirm anzeigt.
Starten Sie Ihren Python IDLE und geben Sie Folgendes ein:
Programm 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 es als app.py (der Name spielt keine Rolle) und drücken Sie F5, um das Programm auszuführen. Alternativ doppelklicken Sie einfach auf Ihre gespeicherte Datei, um die Anwendung zu starten. Wenn Sie alles richtig gemacht haben, öffnet sich ein neues Fenster mit dem Titel Guru99 wie unten gezeigt.
Groß! Es funktioniert. Es ist nicht viel, aber es reicht, um die Grundlagen zu verstehen. Lassen Sie uns nun in diesem PyQt-Tutorial im Detail sehen, was jede der Zeilen in Ihrem Programm tut.
from PyQt5.QtWidgets import QApplication, QWidget
Diese Anweisung importiert alle Module, die Sie zum Erstellen einer GUI in den aktuellen Namensraum benötigen. Das QtWidgets-Modul enthält alle wichtigen Widgets, die Sie in diesem Python-Qt-Tutorial verwenden werden.
app = QApplication(sys.argv)
Hier erstellen Sie ein Objekt der QApplication-Klasse. Dieser Schritt ist eine Notwendigkeit für PyQt5; Jede UI-App muss eine Instanz von QApplication als eine Art Einstiegspunkt in die App erstellen. 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 QApplications übergeben. Daher können Sie es auch durch den folgenden Code ersetzen und müssen nicht einmal das sys-Modul importieren.
app = QApplication([])
w = QWidget()
Als nächstes erstellen wir ein Objekt der QWidget-Klasse. 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, Balken und so weiter. 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 wiederum in einem anderen Widget enthalten ist. Sie werden dies im nächsten Abschnitt in Aktion sehen.
w.resize(300,300)
Mit der resize-Methode der QWidget-Klasse können Sie die Abmessungen eines beliebigen Widgets festlegen. In diesem Fall haben Sie die Größe des Fensters auf 300 x 300 Pixel geändert.
Hier sollten Sie daran denken, dass Widgets ineinander verschachtelt werden können, das äußerste Widget (d. h. das Widget ohne übergeordnetes Element) wird als Fenster bezeichnet.
w.setWindowTitle("Guru99")
Mit der Methode setWindowTitle() können Sie einen String als Argument übergeben, der den Titel des Fensters auf den übergebenen String setzt. Im PyQt5-Beispiel zeigt die Titelleiste Guru99.
anw.show()
show() zeigt einfach das Widget auf dem Bildschirm an.
sys.exit(app.exec_())
Die Methode app.exec_() startet die Qt/C++-Ereignisschleife. Wie Sie wissen, ist PyQt größtenteils in C++ geschrieben und verwendet den Ereignisschleifenmechanismus, um die parallele Ausführung zu implementieren. app.exec_() übergibt die Kontrolle an Qt, das die Anwendung nur beendet, wenn der Benutzer sie über die GUI schließt. Aus diesem Grund beendet Strg+C die Anwendung nicht wie in anderen Python-Programmen. Da Qt die Kontrolle über die App hat, werden Python-Ereignisse nicht verarbeitet, es sei denn, wir richten sie innerhalb der Anwendung ein. Beachten Sie auch, dass die exec-Methode einen Unterstrich im Namen hat; Dies liegt daran, dass exec() bereits ein Schlüsselwort in Python war und der Unterstrich den Namenskonflikt auflöst.
Jenseits leerer Fenster
Im vorherigen Abschnitt haben Sie gesehen, wie Sie ein einfaches Widget in Qt erstellen. Es ist jetzt an der Zeit, einige kompliziertere Schnittstellen zu erstellen, mit denen die Benutzer wirklich interagieren können. Starten Sie erneut Ihren 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 als appone.py oder was auch immer Sie möchten und drücken Sie F5, um das Programm auszuführen. Wenn Sie keine Fehler gemacht haben, öffnet IDLE ein neues Fenster mit etwas Text und einer Schaltfläche, wie unten gezeigt.
- Sobald Sie auf die Schaltfläche im ersten Fenster klicken, öffnet sich ein neues Nachrichtenfeld mit dem Text, den Sie geschrieben haben.
- 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 von Python selbst ein Standardtitel bereitgestellt, da wir keinen Fenstertitel im Meldungsfeld festgelegt hatten.
Nun, da es funktioniert, werfen wir einen Blick auf den zusätzlichen Code, den Sie dem vorherigen PyQt5-Beispiel hinzugefügt haben.
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
Dies importiert einige weitere Widgets, 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 namens dialog definiert, die ein Meldungsfeld-Widget erstellt und Text für die Schaltflächen und andere Felder eingibt.
Die dialog-Methode 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 Click-Ereignis bewirkt, dass diese Funktion ausgeführt wird. Eine solche Funktion wird in Qt Slot genannt, und Sie werden mehr über Signale erfahren 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 Hauptabschnitt der App, und wie im vorherigen Beispiel erstellen Sie zunächst eine 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 verwendet, um nicht bearbeitbaren Text oder Platzhalter in einem Widget zu drucken, während QPushButton verwendet wird, um eine anklickbare Schaltfläche zu erstellen.
Das Entscheidende, was hier zu beachten ist, ist, dass Sie beim Erstellen der label- und btn-Objekte das window-Objekt (w) an die Konstruktoren von QLabel und QPushButton übergeben. So funktioniert die Verschachtelung in PyQt5. Um ein Widget in einem anderen Widget 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 Eltern-Widget festzulegen. Im ersten Fall wird das Label um 100 Pixel nach links und 130 Pixel nach oben im Fenster verschoben.
Ebenso wird die Schaltfläche 110 Pixel von links und 150 Pixel von oben im Fenster platziert. Dieses Beispiel ist eine grobe Art, Layouts zu erstellen, 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 nächsten Abschnitten dieses PyQt-Tutorials ausführlich sehen werden.
btn.clicked.connect(dialog)
Schließlich ist dies ein Beispiel für Signale und Slots in Qt. In GUI-basierten Anwendungen werden Funktionen basierend auf den Aktionen des Benutzers ausgeführt, wie z. B. das Bewegen der Maus über ein Element oder das Klicken auf eine Schaltfläche. Diese Aktionen werden als Ereignisse bezeichnet . Denken Sie daran, dass die Methode app.exec_() die Kontrolle an Qt event- übergibt Schleife. Dafür ist die Ereignisschleife da:um auf Ereignisse zu lauschen und als Reaktion darauf Aktionen auszuführen.
Jedes Mal, wenn ein Ereignis eintritt, beispielsweise wenn ein Benutzer auf eine Schaltfläche klickt, löst das entsprechende Qt-Widget ein Signal aus . Diese Signale können mit Python-Funktionen (wie der Dialogfunktion in diesem Beispiel) verbunden werden, sodass die Funktion ausgeführt wird, wenn ein Signal ausgelöst wird. Diese Funktionen werden Slots genannt im Qt-Jargon.
Anschließend lautet die grundlegende Syntax zum Auslösen einer Slot-Funktion als Reaktion auf das Signal eines Ereignisses wie folgt
widget.signal.connect(slot)
Das heißt, wann immer ein Signal wird durch ein Widget ausgelöst , der verbundene Steckplatz Funktion wird ausgeführt. Zusammenfassend werden Signale und Slots von Qt verwendet, 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 ist eine große Anzahl von Widgets zum Erstellen von GUI-Apps verfügbar. Bei PyQt5 gab es jedoch eine Neuordnung der Klassen in verschiedene Module und Überarbeitungen in den Lizenzen.
Daher ist es wichtig, einen allgemeinen Überblick über die Struktur von PyQt5 zu haben. In diesem Abschnitt erfahren Sie, wie PyQt5 intern organisiert ist, und erfahren mehr über die verschiedenen Module, Bibliotheken und API-Klassen, die von PyQt5 bereitgestellt werden.
PyQt5-Verzeichnisstruktur
Dies sind die grundlegenden Module, die von Pythons Qt-Bindung verwendet werden, insbesondere PyQt5.
- Qt :Es kombiniert alle unten genannten Klassen / Module in einem einzigen Modul. Es erhöht den von der Anwendung verwendeten Speicher erheblich. Es ist jedoch einfacher, das Framework zu verwalten, indem Sie nur ein Modul importieren.
- QtCore :Enthält die wichtigsten nicht-grafischen Klassen, die von anderen Modulen verwendet werden. Hier werden die Qt-Ereignisschleife, Signale und Slot-Konnektivität usw. implementiert.
- QtWidgets :Enthält die meisten in Pyqt5 verfügbaren Widgets.
- QtGui :Enthält GUI-Komponenten und erweitert das QtCore-Modul.
- QtNetwork :Enthält Klassen, die zur Implementierung der Netzwerkprogrammierung über Qt verwendet werden. Es unterstützt TCP-Server, TCP-Sockets, UDP-Sockets, SSL-Handling, Netzwerksitzungen und DNS-Lookups.
- QtMultimedia bietet Low-Level-Multimedia-Funktionalität.
- 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()
- QRadioButton :Dies ist ein Eingabefeld mit einem wählbaren Button, ähnlich den Radiobuttons 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 ein wählbares quadratisches Kästchen vor dem Label an, das angekreuzt ist, wenn es ausgewählt ist, ähnlich wie bei Optionsfeldern.
check = QCheckBox("button title")
- QMenüleiste :Es zeigt eine horizontale Menüleiste am oberen Rand eines Fensters an. Sie können dieser Leiste nur Objekte der QMenu-Klasse hinzufügen. Diese QMenu-Objekte können weiterhin Strings, QAction-Objekte oder andere QMenu-Objekte enthalten.
- QToolBar :Dies ist ein horizontaler Balken oder Bereich, der innerhalb des Fensters verschoben werden kann. Es kann Schaltflächen und andere Widgets enthalten.
- QTab :Es wird verwendet, um den Inhalt eines Fensters in mehrere Seiten aufzuteilen, auf die über verschiedene Registerkarten oben im Widget zugegriffen werden kann. Es besteht aus zwei Bereichen:der Tab-Leiste und der Tab-Seite.
- QScrollBar :Es wird verwendet, um Bildlaufleisten zu erstellen, die es dem Benutzer ermöglichen, innerhalb eines Fensters nach oben und unten zu scrollen. Es besteht aus einem beweglichen Schieberegler, einer Schiebereglerspur und zwei Schaltflächen, um den Schieberegler nach oben oder unten zu scrollen.
scroll = QScrollBar()
- QSplitter :Splitter werden verwendet, um den Inhalt eines Fensters zu trennen, sodass die Widgets richtig gruppiert werden und nicht überladen erscheinen. QSplitter ist einer der primären Layout-Handler, die in PyQt5 verfügbar sind, und wird verwendet, um den Inhalt sowohl horizontal als auch vertikal aufzuteilen.
- QDock :Ein 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 erweiterte Benutzeroberflächen für Anwendungen erstellt werden können. 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 zwei interessierenden Klassen, die von QBoxLayout erben, sind:
- QHBoxLayout:Wird verwendet, um die untergeordneten Widgets horizontal auszurichten.
- QVBoxLayout:Wird verwendet, um die untergeordneten Widgets vertikal auszurichten.
So sehen beispielsweise drei mit QHBoxLayout ausgerichtete Schaltflächen aus.
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 sehen sie in QVBoxLayout aus.
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 wird verwendet, um Widgets in das HBox- oder VBox-Layout einzufügen. Es wird auch in anderen Layouts verwendet, wo 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 verwendet, um Schnittstellen zu erstellen, in denen die Widgets in Form eines Gitters angeordnet sind (wie eine Matrix oder ein 2D-Array). 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 zu erstellen (d. h. ein Raster mit drei Zeilen und drei Spalten), 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 ist die Ausgabe:
Die Methode addWidget() im Grid-Layout akzeptiert diese Argumente:
- Das Widget-Objekt, das Sie dem Raster hinzufügen möchten
- Die x-Koordinate des Objekts
- Die y-Koordinate des Objekts
- Die Zeilenspanne (Standard =0)
- Die Spaltenspanne (Standard=0)
Zum besseren Verständnis können Sie jedes Widget wie unten gezeigt manuell einfügen
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 enthält einige integrierte Designs, die Sie in Ihren Apps verwenden können. Der setStyle() -Methode, die von der QApplication-Instanz aufgerufen wird, wird verwendet, um ein bestimmtes Thema für Ihre Anwendung festzulegen.
Wenn Sie beispielsweise die folgende Codezeile hinzufügen, wird das Design Ihrer Anwendung von Standard zu Fusion geändert
app.setStyle("Fusion")
So sieht das vorherige Beispiel im Fusion-Design aus
Eine weitere nützliche Funktion zum Gestalten Ihrer Apps ist die Methode setPalette(). Hier ist der Code zum Ändern der Farbe verschiedener Widgets mit 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 Methode setPalette() zu verwenden, müssen Sie zunächst eine Palette definieren. Dies geschieht durch Erstellen eines Objekts der QPalette-Klasse.
qp = QPalette()
Beachten Sie, dass die QPalette-Klasse zum QtGui-Modul gehört und Sie sie importieren müssen, damit dies funktioniert. Nachdem Sie das QPalette-Objekt erstellt haben, verwenden Sie die setColor()-Methode, um den Namen eines Widgets, dessen Farbe Sie ändern möchten, und die einzustellende Farbe zu übergeben.
qp.setColor(QPalette.Window, Qt.black)
Dadurch ändert sich die Farbe des Fensters in Schwarz. 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.
Zusammenfassung
- PyQt ist die Python-Bindung für das C++-UI-Framework Qt.
- PyQt4 und PyQt5 sind die beiden Hauptversionen, die von Riverbank Computing entwickelt wurden.
- Die Hauptmodule des PyQt-Frameworks sind:
- Qt
- QtCore
- QtWidgets
- QtGui
- QtSQL
- QtNetwork
- PyQt unterstützt verschiedene Widgets wie:
- Schaltflächen
- Textlabels
- Textfelder
- Optionsschaltflächen und Kontrollkästchen
- Symbolleisten und Menüleisten
- Webkit
- Registerkarten
- Docks
- In PyQt wird Interaktivität mithilfe von Signalen implementiert und Slots.
- Ein Ereignis ist eine Aktion, die von einem Benutzer in der GUI ausgeführt wird (wie das Klicken auf eine Schaltfläche).
- Ein Signal wird vom entsprechenden Widget ausgelöst, wenn ein Ereignis darauf eintritt.
- Ein Steckplatz ist eine Funktion, die mit dem Signal verbunden ist und ausgeführt wird, wenn das Signal angehoben wird.
- PyQt verfügt über eine robuste Layout-Engine und unterstützt erweitertes Layout-Design und -Management. Dies sind zwei häufig verwendete Layoutschemata in PyQt:
- Box-Layout
- Rasterlayout
- Der PyQt-Designer ermöglicht es Ihnen, benutzerdefinierte Designs für GUI-Anwendungen zu erstellen, und verfügt über eine integrierte Unterstützung für Stylesheets.
- Qt Creator Python kann verwendet werden, um Benutzeroberflächen sowie eigenständige Anwendungen zu erstellen.
Python
- Tutorial zu C#-Sammlungen mit Beispielen
- Python String count() mit BEISPIELE
- Python String format() Erklären Sie mit BEISPIELE
- Python String find() Methode mit Beispielen
- Python-Lambda-Funktionen mit BEISPIELE
- Python-Funktion round() mit BEISPIELE
- Python map() Funktion mit BEISPIELE
- Python Timeit() mit Beispielen
- Python-Zähler in Sammlungen mit Beispiel
- type() und isinstance() in Python mit Beispielen