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.

  • 🔘 Was ist PyQt? A Python Bindung für Qt C++ Framework, betreut von Riverbank Computing.
  • ☑️ Versionen: PyQt4 bindet Qt 4.x und 5.x; PyQt5 zielt nur auf die Qt 5.x-Serie ab.
  • Installation: Der Paketmanager pip installiert PyQt5 aus einem Wheel-Paket mit einem einzigen Befehl.
  • 🧪 Erste App: QApplication und QWidget erstellen und zeigen ein einfaches Fenster auf dem Bildschirm an.
  • Signals und Slots: Widget-Ereignisse lösen Signale aus, die mit folgenden Verbindungen verknüpft sind: Python Slot-Funktionen.
  • 🤖 KI-fähig: PyQt erstellt Desktop-Frontends, die Modelle des maschinellen Lernens ausführen und visualisieren.

PyQt5-Tutorial

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.

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

Grundlegendes PyQt Concepts

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.

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

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.

  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 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:

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

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.

Themen

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.

Themen

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.

Häufig gestellte Fragen

Tkinter wird ausgeliefert mit Python PyQt eignet sich für kleine, einfache Anwendungen und bietet deutlich mehr Widgets, einen visuellen Designer und ein natives Erscheinungsbild. Dadurch ist es besser für große, professionelle Desktop-Anwendungen geeignet – allerdings auf Kosten einer steileren Lernkurve und der GPL-Lizenzierung.

Beide binden dieselben Qt-Bibliotheken und verwenden nahezu identische APIs. Der Hauptunterschied liegt in der Lizenzierung: PyQt nutzt die GPL oder eine kostenpflichtige kommerzielle Lizenz, während PySide (Qt für …) … Python) verwendet die LGPL, wodurch die kostenlose Verbreitung von proprietärem Quellcode ermöglicht wird.

Qt Designer ist ein Drag-and-Drop-Tool, das Ihr Layout als XML-Datei mit der Endung .ui speichert. Konvertieren Sie es in Python mit dem Hilfsprogramm pyuic5 oder laden Sie es zur Laufzeit mit uic.loadUi().

PyQt6 bindet das neuere Qt-6-Framework und benötigt vollständig definierte Enumerationen, wie z. B. `Qt.AlignmentFlag.AlignLeft`. PyQt5 zielt auf Qt 5 ab und ist weiterhin die am weitesten verbreitete Version. PyQt6 entfernt außerdem einige veraltete Module und bietet eine verbesserte Unterstützung für hohe DPI-Auflösungen.

Verwenden Sie PyInstaller: Führen Sie `pyinstaller --onefile --windowed app.py` aus, um Ihr Skript, PyQt5 und die Qt-Bibliotheken in einer einzigen ausführbaren Datei zu bündeln. Der Parameter `--windowed` blendet die Konsole aus. FBS und Cx_Freeze sind gängige Alternativen.

PyQt5 ist anfängerfreundlich, wenn man über Grundkenntnisse verfügt. PythonDas Verständnis von Klassen, Objekten und dem Signal-Slot-Muster ist sehr hilfreich. Mit Qt Designer können Sie Layouts visuell erstellen und so funktionsfähige Fenster entwickeln, bevor Sie jedes Widget manuell erlernen.

PyQt erstellt Desktop-Oberflächen für Modelle des maschinellen Lernens – Dashboards, die Daten laden, Training oder Inferenz auslösen und Vorhersagen, Diagramme oder Bilder anzeigen. Es harmoniert gut mit NumPy, pandas und Matplotlib.ping Ein trainiertes Modell in einer benutzerfreundlichen GUI.

Ja. GitHub Copilot vervollständigt häufige PyQt5-Muster wie die Einrichtung von QApplication, die Erstellung von Widgets und die Verbindung von Signal-Slots anhand eines Kommentars oder Funktionsnamens. Führen Sie immer das generierte Fenster aus, um sicherzustellen, dass Layouts und Ereignisbehandler wie gewünscht funktionieren.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: