Umfassendes PyQt5 Tutorial: Professionelle GUIs in Python erstellen
Was ist PyQt?
PyQt ist ein Python-Binding für das Qt Framework, eine cross-platform C++ Library zur Erstellung nativer GUI-Applikationen auf Windows, macOS, Linux, Android, iOS, Raspberry Pi und mehr. Das Binding wird von Riverbank Computing (UK) gewartet, während Qt selbst von The Qt Company (Finnland) entwickelt wird. PyQt gibt Python-Entwicklern Zugriff auf Qts reichhaltiges Set an Widgets, Networking, Database, 3D und Multimedia-Fähigkeiten.
In diesem Tutorial lernen Sie:
- Wesentliche Features von PyQt5
- Verfügbare PyQt-Versionen
- PyQt5 Installation auf Windows, macOS und Linux
- Fundamentale PyQt-Konzepte und Beispielprogramme
- Kernkomponenten und Widgets
- Layout-Strategien und Theme-Customization
Wesentliche Features von PyQt5
PyQt5 exponiert über 600 Klassen, die abdecken:
- Graphical User Interfaces
- SQL Database Integration (SQLite, MySQL, PostgreSQL, Oracle, ODBC)
- Web Rendering via QtWebEngine
- XML Parsing und Manipulation
- Robustes Networking (TCP/UDP, SSL, DNS)
- Multimedia und 3D Graphics (QtMultimedia, Qt3D)
Diese Fähigkeiten ermöglichen Entwicklern den Bau komplexer, hochperformanter Desktop- und Embedded-Applikationen. Große Konzerne wie LG, Mercedes-Benz, AMD, Panasonic und Harman setzen auf Qt für ihre UI-Stacks.
PyQt Versionen
Riverbank Computing bietet zwei Haupt-Bindings:
- PyQt4 – unterstützt Qt 4.x und Qt 5.x Module (nicht rückwärtskompatibel)
- PyQt5 – Bindings exklusiv für Qt 5.x
Zusätzlich bietet PyQt3D Python-Bindings für das Qt3D Framework, nützlich für Echtzeit-3D-Rendering und Simulation.
PyQt5 installieren
Zwei gängige Installationsmethoden werden unten beschrieben. Wir empfehlen Wheel-Packages, da sie kompilierte C++ Binaries enthalten und langwierige Build-Prozesse vermeiden.
Methode 1: Via Wheels installieren (Empfohlen)
- Bevorzugtes Terminal oder Command Prompt öffnen.
pip install PyQt5ausführen, um das Wheel (≈ 50 MB) herunterzuladen.- Verifizieren, dass die Installation erfolgreich abschließt.
Beispiel auf Windows:
pip install PyQt5
Nach Installation können Sie PyQt5.QtWidgets importieren und Applikationen bauen.
Methode 2: Aus Source bauen
Source-Build ist komplexer, da er C++ Code kompiliert. Nur nötig, wenn Sie Custom-Modifikationen brauchen oder das Wheel für Ihre Plattform unavailable ist.
Grundlagen der PyQt5 Programmierung
Unten ein minimales Beispiel, das ein 300×300 Fenster mit Titel "Guru99" öffnet. Jede Zeile ist annotiert für Klarheit.
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_())
Erklärung:
QApplication– die Kern-Event-Loop.QWidget– Basisklasse für alle UI-Komponenten.resize()– setzt Fensterdimensionen.setWindowTitle()– definiert Titelbar-Text.show()– zeigt das Widget an.app.exec_()– startet Event Loop und blockiert bis Fenster schließt.
Interaktivität hinzufügen
Das folgende Beispiel fügt ein Label, einen Button und eine Message Box hinzu, die erscheint, wenn der Button geklickt wird. Es demonstriert Signals und Slots, das Herz von Qts Event-System.
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("Behold the Guru, Guru99", w)
label.move(100, 130)
btn = QPushButton("Beheld", w)
btn.move(110, 150)
btn.clicked.connect(dialog)
w.show()
sys.exit(app.exec_())
Klicken auf den Button triggert dialog(), welches ein modales QMessageBox erstellt.
Kernkomponenten und Widgets
PyQt5s Architektur ist in mehrere Module organisiert. Das Verständnis dieser Hierarchie hilft, nur das Nötige zu importieren.
Modul-Übersicht
- Qt – aggregiert alle Sub-Module; praktisch für kleine Skripte.
- QtCore – Kern Non-GUI Klassen (Signals, Slots, Timer).
- QtWidgets – Standard GUI Widgets (Buttons, Labels, etc.).
- QtGui – Grafische Primitives und Advanced Painting.
- QtNetwork – TCP/UDP Sockets, SSL, DNS.
- QtMultimedia – Audio/Video Support.
- QtSql – Database Integration.
Gängige Widgets
QLineEdit– Einzeiliges Text-Input.QRadioButton– Auswählbarer Radio Button.QComboBox– Dropdown-Selektor.QCheckBox– Toggle Box.QMenuBar– Horizontale Menüleiste.QToolBar– Toolbar mit Buttons.QTabWidget– Tabbed Interface.QScrollBar– Scrollbar Widget.QSplitter– Resizable Split View.QDockWidget– Abnehmbares Dock Panel.
Layout Management
Statt Widgets manuell mit move() und resize() zu positionieren, bietet Qt Layout Manager, die Widgets basierend auf Fenstergröße automatisch anordnen.
Box Layouts (HBox & VBox)
QHBoxLayout ordnet Widgets horizontal an; QVBoxLayout vertikal.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
app = QApplication([])
win = QWidget()
win.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()
Ersetzen Sie QHBoxLayout mit QVBoxLayout, um Buttons vertikal zu stapeln.
Grid Layout
Widgets in einem 2D-Grid organisieren. addWidget() akzeptiert Row- und Column-Indizes plus optionale Row-Span/Column-Span Argumente.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
for j in range(3):
layout.addWidget(QPushButton(f"Button {i},{j}"), i, j)
win.show()
app.exec_()
Custom Themes und Styles
PyQt5 unterstützt native Themes und Custom Stylesheets.
Eingebaute Themes
Applikations-Style mit app.setStyle("Fusion") oder jedem anderen verfügbaren Style setzen.
app = QApplication([])
app.setStyle("Fusion")
Palette Customization
QPalette nutzen, um Widget-Farben programmatisch zu modifizieren.
from PyQt5.QtGui import QPalette from PyQt5.QtCore import Qt palette = QPalette() palette.setColor(QPalette.ButtonText, Qt.black) palette.setColor(QPalette.Window, Qt.black) palette.setColor(QPalette.Button, Qt.gray) app.setPalette(palette)
Qt Style Sheets (CSS-ähnlich)
Für advanced Styling Stylesheets direkt auf Widgets oder gesamte Applikation anwenden.
btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")
Kernaussagen
- PyQt5 ist ein mächtiges Python-Binding für das Qt Framework, geeignet für cross-platform Desktop, Embedded und Mobile Apps.
- Installation am besten via Wheels; Source Builds optional.
- Kernmodule: QtCore, QtGui, QtWidgets, QtNetwork, QtMultimedia, QtSql.
- Widgets umfassen Buttons, Labels, Textfelder, Radio Buttons, Checkboxes, Menüs, Toolbars, Tabs, Splitter, Docks.
- Interaktivität basiert auf Qts Signals und Slots Mechanismus.
- Layouts – Box und Grid – automatisieren Widget-Platzierung, verbessern Responsivität.
- Theming erreichbar mit eingebauten Styles, Palettes oder Qt Style Sheets.
- Qt Designer und Qt Creator streamlinen UI Design und Applikation Packaging.
Python
- C# Collections meistern: Praktisches Tutorial mit Real-World-Beispielen
- Pythons str.count(): Zeichen & Teilstrings zählen mit Beispielen
- Python format()-Strings meistern mit klaren Beispielen
- Pythons String.find()-Methode meistern: Syntax, Beispiele & Alternativen
- Python Lambda-Funktionen meistern: Praxisbeispiele & Best Practices
- Python round()-Funktion erklärt mit praktischen Beispielen
- Pythons map()-Funktion meistern: Syntax, Beispiele und Best Practices
- Python timeit(): Ausführungszeit messen mit praktischen Beispielen
- Python Counter in collections: Effizientes Zählen, Aktualisieren und arithmetische Operationen
- type() und isinstance() in Python verstehen: Praktische Beispiele