PyQt5-Tutorial mit Beispielen: GUI mit PyQt entwerfen in Python

Was ist PyQt?

PyQt ist eine Python-Bindung des Open-Source-Widget-Toolkits Qt, das auch als plattformübergreifendes Framework für die Anwendungsentwicklung 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, Mac OS, Android, iOS, Raspberry Pi und mehr).

PyQt ist eine freie Software, die von Riverbank Computing, einem in England ansässigen Unternehmen, entwickelt und verwaltet wird, während Qt von einer finnischen Firma namens The Qt Company entwickelt wird.

Funktionen von PyQT

Hier sind wichtige Funktionen von PyQt:

Lernen Sie PyQt, das aus mehr als sechshundert Klassen besteht, die eine Reihe von Funktionen abdecken, wie z

  • Grafische Benutzeroberflächen
  • SQL-Datenbanken
  • Web-Toolkits
  • XML-Verarbeitung
  • Networking mit anderen Teilnehmern

Diese Funktionen können kombiniert werden, um erweiterte Benutzeroberflächen sowie eigenständige Anwendungen zu erstellen. Viele große Unternehmen aller Branchen nutzen Qt. Einige Beispiele sind LG, Mercedes, AMD, Panasonic, Harman usw.

PyQt-Versionen

PyQt ist in zwei Editionen verfügbar, PyQt4 und PyQt5. PyQt4 stellt Klebercode für die Bindung der 4.x- und 5.x-Versionen des Qt-Frameworks bereit, 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 zur 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 zur Erstellung von Echtzeitsimulationssystemen 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 Code unter der Haube. Daher 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 mit 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 Pythonmüssen Sie pip herunterladen und installieren, bevor Sie fortfahren. Anweisungen dazu finden Sie unter diesem Link: https://pypi.org/project/pip/.

Um PyQt5 zu installieren,

Schritt 1) Öffnen Sie die Eingabeaufforderung.
Öffnen Sie die Eingabeaufforderung oder PowerShell in Ihrem Windows Maschine.

Installieren Sie PyQt5

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.

Installieren Sie PyQt5

Alternativ können Sie auch eine herunterladen Windows Binärdatei für die auf Ihrem Computer installierte Python-Version.

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-Designanwendungen.

Beginnen wir in diesem PyQt5-Tutorial mit einer einfachen App, die ein leeres Fenster auf Ihrem Bildschirm anzeigt.

Starten Sie Ihre 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 es als app.py (der Name ist egal) und drücken Sie F5, um das Programm auszuführen. Alternativ können Sie auch einfach auf Ihre gespeicherte Datei doppelklicken, um die Anwendung zu starten. Wenn Sie alles richtig gemacht haben, öffnet sich ein neues Fenster mit dem Titel Guru99, wie unten gezeigt.

Grundlegendes PyQt Concepts

Großartig! Es funktioniert. Es ist nicht viel, aber es reicht aus, um die Grundlagen zu verstehen. Lassen Sie uns nun in diesem PyQt-Tutorial im Detail sehen, was die einzelnen Zeilen in Ihrem Programm bewirken.

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 QApplications übergeben. Daher können Sie es auch durch den untenstehenden Code ersetzen und müssen nicht einmal das sys-Modul 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 bedenken, dass Widgets ineinander verschachtelt sein können. Das äußerste Widget (dh das Widget ohne übergeordnetes Widget) 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 von Ihnen übergebenen String setzt. Im PyQt5-Beispiel wird in der Titelleiste Guru99 angezeigt.

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 verwendet den Ereignisschleifenmechanismus, um eine 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. Deshalb 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; das liegt daran, dass exec() bereits ein Schlüsselwort in Python war und der Unterstrich Namenskonflikte löst.

Jenseits leerer Fenster

Im vorherigen Abschnitt haben Sie gesehen, wie Sie in Qt ein einfaches Widget erstellen. Jetzt ist es an der Zeit, einige komplexere Schnittstellen zu erstellen, mit denen die Benutzer wirklich interagieren können. Starten Sie noch einmal Ihr 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, IDLE öffnet ein neues Fenster mit etwas Text und einer Schaltfläche, wie unten gezeigt.

Mehr als leer Windows

  1. Sobald Sie im ersten Fenster auf die Schaltfläche klicken, wird ein neues Nachrichtenfeld mit dem von Ihnen geschriebenen Text geöffnet.
  2. Sie können jetzt auf die Schaltfläche „Details ausblenden/Details anzeigen“ klicken, um die Sichtbarkeit von zusätzlichem Text umzuschalten.

Wie Sie sehen, wurde von Python selbst ein Standardtitel bereitgestellt, da wir im Meldungsfeld keinen Fenstertitel festgelegt hatten.

Nachdem es nun 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

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 Hauptabschnitt der App und wie im vorherigen Beispiel beginnen Sie mit der Erstellung einer Instanz von QApplication, gefolgt von einem einfachen Widget, also 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)

Schließlich ist dies ein Beispiel für Signale und Slots in Qt. In GUI-basierten Anwendungen werden Funktionen basierend auf den vom Benutzer ausgeführten Aktionen ausgeführt, z. B. wenn Sie mit der Maus über ein Element fahren oder auf eine Schaltfläche klicken. Diese Aktionen werden aufgerufen Veranstaltungen. Denken Sie daran, dass die Methode app.exec_() die Kontrolle an Qt überträgt Veranstaltung-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.

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 a 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 wichtig, einen umfassenden Überblick über die Struktur von PyQt5 zu haben. In diesem Abschnitt sehen Sie, wie PyQt5 intern organisiert ist, und erfahren mehr über die verschiedenen Module, Bibliotheken und API-Klassen, die von PyQt5 bereitgestellt werden.

PyQt5-Verzeichnisstruktur

PyQt5-Verzeichnisstruktur

Dies sind die grundlegenden Module von Python's Qt-Bindung, insbesondere PyQt5.

  • Qt: Es vereint 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 nur ein Modul importiert wird.
  • QtCore: Enthält die wichtigsten nichtgrafischen Klassen, die von anderen Modulen verwendet werden. Hier werden die Qt-Ereignisschleife, Signale, 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.
  • 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 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 einer auswählbaren Schaltfläche, ä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")
  • QMenuBar: Es zeigt eine horizontale Menüleiste oben im Fenster an. Sie können dieser Leiste nur Objekte der QMenu-Klasse hinzufügen. Diese QMenu-Objekte können außerdem Zeichenfolgen, 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.
  • 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 Abschnitten: der Tab-Leiste und der Tab-Seite.
  • QScrollBar: Wird zum Erstellen von Bildlaufleisten verwendet, die es dem Benutzer ermöglichen, innerhalb eines Fensters nach oben und unten zu scrollen. Es besteht aus einem beweglichen Schieberegler, einer Schiebereglerschiene und zwei Tasten zum Scrollen des Schiebereglers nach oben oder unten.
    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.
  • 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 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.

  1. QBoxLayout
  2. 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.

QBoxLayout

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.

QBoxLayout

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:

QGridLayout

Die Methode addWidget() im Rasterlayout akzeptiert folgende Argumente:

  • Das Widget-Objekt, das Sie dem Raster hinzufügen möchten
  • Die x-Koordinate des Objekts
  • Die y-Koordinate des Objekts
  • Der Zeilenbereich (Standard = 0)
  • Der Spaltenbereich (Standard = 0)

Um es besser zu verstehen, 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:

QGridLayout

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.

QGridLayout

Themes

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, wird das Design Ihrer Anwendung von Standard auf Fusion geändert

app.setStyle("Fusion")

So wird das vorherige Beispiel im Fusion Theme aussehen

Themes

Eine weitere nützliche Funktion zum Thematisieren Ihrer Apps ist die setPalette()-Methode. 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.

Themes

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 QPalette-Klasse zum QtGui-Modul gehört und Sie sie importieren müssen, damit dies funktioniert. Sobald Sie das QPalette-Objekt erstellt haben, verwenden Sie die Methode setColor(), um den Namen eines Widgets zu übergeben, dessen Farbe Sie ändern möchten, sowie die Farbe, die Sie festlegen möchten.

 qp.setColor(QPalette.Window, Qt.black)

Dadurch wird die Farbe des Fensters 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.

Zusammenfassung

  • PyQt ist die Python-Bindung für die C++ UI-Framework, Qt.
  • PyQt4 und PyQt5 sind die beiden Hauptversionen, die von Riverbank Computing entwickelt wurden.
  • Die Hauptmodule des PyQt-Frameworks sind:
    1. Qt
    2. QtCore
    3. QtWidgets
    4. QtGui
    5. QtSql
    6. Qt-Netzwerk
  • PyQt unterstützt verschiedene Widgets wie:
    1. Tasten
    2. Textbeschriftungen
    3. Textfelder
    4. Optionsfelder und Kontrollkästchen
    5. Symbolleisten und Menüleisten
    6. Web-Kit
    7. Tabs
    8. Hafen
  • In PyQt wird Interaktivität mithilfe von implementiert Signale und Steckplätze.
  • An Event ist eine Aktion, die ein Benutzer in der GUI ausführt (z. B. das Klicken auf eine Schaltfläche).
  • A Signal wird vom entsprechenden Widget ausgelöst, wenn darauf ein Ereignis auftritt.
  • A Schloß 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:
    1. Box Layout
    2. Raster-Layout
  • Mit dem PyQt-Designer können Sie benutzerdefinierte Designs für GUI-Anwendungen erstellen und verfügen über eine integrierte Unterstützung für Stylesheets.
  • qtcreator Python kann zum Erstellen von Benutzeroberflächen sowie eigenständigen Anwendungen verwendet werden.