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

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

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

app.setStyle("Fusion")

So wird das vorherige Beispiel im Fusion Theme aussehen

Themen

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.

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

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: