Qt5 und Python

Aktualisiert am 18. September 2020

Bei Qt handelt es sich um ein Framework, mit dem (GUI-)Applikationen für unterschiedliche Plattformen entwickelt werden können. Zusammen mit Python 3 kann Qt5 insbesondere dafür verwendet werden, Anwendungen mit grafischer Benutzeroberfläche zu erstellen. Weitere Informationen zu diesem Framework gibt es auf der Qt-Homepage.

Um das Framework nutzen zu können, müsst Ihr die entsprechende Bibliothek installieren:

pip install PyQt5 (Windows)
pip3 install PyQt5 (macOS)
apt install python3-qt5 (Ubuntu Linux)

Sobald die Installation abgeschlossen ist, kann es auch sofort mit einem ersten Projekt losgehen. Ein einfaches, leeres Applikations-Fenster lässt sich mit folgendem Code realisieren:

import sys
from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

# oder
# app = QApplication([])

# Ein Fenster erzeugen
window = QWidget()
window.resize(450, 300)
window.move(300, 300)
window.setWindowTitle('Qt5-Fenster')

# Standardmäßig wird ein Fenster nicht angezeigt, deswegen
window.show()

# Event loop starten
app.exec_()

Dies führt zu folgendem Fenster (Windows 10 und macOS):

Ein Qt5-Fenster, erstellt mit Python
Qt5-Fenster unter macOS

Der erforderliche Code ist sehr einfach: Zunächst wird eine QApplication-Instanz erzeugt. Diese Instanz wird der Parameter sys.arg übergeben. Dabei handelt es sich um eine Liste mit zu übergebenden Kommandozeilen-Argumenten. Falls keine Argumente übergeben werden sollen, kann man auch

app = QApplication([])

schreiben.

Es folgt dann die Erzeugung einer QWidget-Instanz. Das eröffnet uns die Möglichkeit, die Größe des Fensters, die Position und den Fenster-Titel festzulegen. Die Zeile window.show() lässt dann das Fenster auf dem Monitor erscheinen. Schließlich wird mit app.exec_() die Ereignis-Schleife (event loop) gestartet. Der Unterstrich bei exec_ ist übrigens erforderlich, da exec ein in Python 2 reserviertes Wort war.

Mit Python ist auch eine objektorientierte Programmierung möglich. Deswegen folgt nun ein anderer Ansatz, bei dem eine Klasse erstellt wird.

import sys
from PyQt5.QtWidgets import QApplication, QWidget

class SimpleApp(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'Qt5-Fenster'
        self.left = 300
        self.top = 300
        self.width = 450
        self.height = 300
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.show()

if __name__ == '__main__':
        app = QApplication(sys.argv)
        example_window = SimpleApp()
    sys.exit(app.exec_())

In diesem Beispiel lassen sich die Elemente des vorherigen Codes wiedererkennen, so dass er ebenfalls nicht schwer zu verstehen sein dürfte. Die Fenster-Eigenschaften werden hier in der Klasse SimpleApp „verpackt“. Für die Position, die Breite und die Höhe des Fensters wird die Methode setGeometry() genutzt. Die Zeile example_window = SimpleApp() sorgt schließlich für die Instanziierung von SimpleApp.

Als Fazit kann also festgehalten werden, dass die Erzeugung eines einfachen Fensters nicht sonderlich schwierig ist. Die hier gezeigten Beispiele sollten übrigens sowohl auf Linux als auch auf macOS und Windows laufen.

Auch wenn man mit QWidget ein Fenster erzeugen kann, würde man in der Praxis für das Erstellen eines Hauptfensters eher QMainWindow verwenden, ein Widget, das alle für ein Fenster erforderlichen Standardkomponenten beinhaltet. Ein Beispiel dafür findet Ihr in diesem Blogbeitrag.

Weitere Artikel zu PyQt5