Python: Grafische Benutzeroberfläche mit PyQt5 (Grundlagen)

In diesem Artikel geht es um die Erstellung einer grafischen Benutzeroberfläche mit PyQt5. Ich möchte erklären, wie mit PyQt5 Fenster erstellt werden, wie sich darauf Widgets platzieren lassen und wie diese Widgets mit Funktionen verbunden werden.

Fenster erstellen

In PyQt5 ist es üblich, die Fenster als Klasse zu definieren. Man könnte das Fenster-Objekt auch direkt in einer Variable speichern, aber das wäre nicht so übersichtlich.

In unserem Codebeispiel (siehe unten „Code“) importieren wir zuerst einige Module aus der PyQt Library. Dann beginnen wir mit dem Schlüsselwort „class“ eine neue Klasse. Anschließend wählen wir einen Namen für unsere Fenster-Klasse und übergeben dem Ganzen in den Klammern die QMainWindow-Klasse, die wir von PyQt5 bekommen und die uns ein Hauptfenster erzeugt.

Beim Erstellen einer Instanz einer Klasse wird automatisch der Konstruktor, also die __init__-Funktion aufgerufen. Diese Funktion eignet sich also perfekt, um in ihr Variablen zu definieren oder beispielsweise Knöpfe zu erstellen, die im Fenster erscheinen sollen. Jeder Funktion in einer Klasse wird in Python automatisch schon der Parameter „self“ übergeben – dieser Parameter steht dann für die jeweilige Instanz.

Mit dem Befehl „super“ können wir Eigenschaften aus der Elternklasse „QMainWindow“ übernehmen und deren Funktionen benutzen. In diesem Fall führen daraus die __init__-Funktion aus, die uns schon ein erstes Fenster erstellt.

Die gesamte Anwendung wird in einer Variable „app“ gespeichert. Danach erzeugen wir von der oben definierten Klasse „MainWindow“ eine Instanz und zeigen sie mit dem Befehl „show“.

Damit sich das Programm nicht sofort beendet, bauen wir mit „exec_“ eine Hauptschleife ein.

Code

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow

#Klasse für Fenster erstellen
class MainWindow(QMainWindow):
	def __init__(self):	#Die __init__()-Funktion wird beim erstelen automatisch aufgerufen
		super().__init__()	#Ausführen der Funktion __init__() aus der QMainWindow
					#Klasse

app = QtWidgets.QApplication([])
win = MainWindow()		#Objekt von der Fenster-Klasse erstellen
win.show()			#Das Fenster anzeigen

app.exec_		#Hauptschleife für das Programm

Beim Programmieren gibt es auch Rechtschreibregeln

Es gibt auch in der Programmierung zu der Syntax des Codes einige Rechtschreibregeln die man beachten sollte, damit andere Programmierer und auch man selbst den Code besser lesen können/kann. In diesem Fall ist es eine Konvention, dass man Klassennamen groß schreibt und möglichst nach einem Nomen benennt oder von einem Nomen ableitet. Die Funktionen wie die __init__ Funktion schreibt man dagegen klein und sie ist von einem Verb, initialisieren, abgeleitet.

Beispiel-Widget: Button

Wie für das Hauptfenster, gibt es auch für Buttons in PyQt5 eine Klasse, aus der wir praktisch endlos viele Instanzen erzeugen können.

Im Beispiel-Code müssen nur einige Sachen geändert werden:

Ganz oben muss die „QPushButton“-Klasse eingebunden werden.

Damit der Button auch sofort erscheint wenn das Fenster erstellt wird, müssen wir ihn in der __init__()-Funktion erstellen, weil sie ja, wie schon gesagt, beim erzeugen einer Instanz automatisch aufgerufen wird.

Die Instanz, die wir von der QPushButton Klasse erzeugen, speichern wir in der Variable b. Zusätzlich übergeben wir ihr noch die Parameter für den Text, der auf den Button angezeigt wird und auf welchem Fenster er angezeigt werden soll, in diesem Fall auf der Klasse in der er erzeugt wird (self).

Jetzt würde der Button schon angezeigt werde. Um ihn an eine andere Stelle auf dem Fenster zu bewegen kann man die „move“-Funktion auf dem Button-Objekt aufrufen. Die Koordinate die man als Parameter angibt sagen wo sich die obere linke Ecke des Buttons befinden soll.

Code

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QPushButton	#Der Button muss importiert werden

#Klasse für Fenster erstellen
class MainWindow(QMainWindow):
	def __init__(self):	#Die __init__()-Funktion wird beim erstelen automatisch aufgerufen
		super().__init__()	#Ausführen der Funktion __init__() aus der QMainWindow
					#Klasse
		
		#Button erstellen
		b = QPushButton(„Ich bin ein Button“, self)
		b.move(40, 40)
		b.clicked.connect(funk)
	
	def funk(self):
		print(„hallo welt“)
app = QtWidgets.Qapplication([])
win = MainWindow()		#Objekt von der Fenster-Klasse erstellen
win.show()			#Das Fenster anzeigen

app.exec_		#Hauptschleife für das Programm

Button mit Funktion verbinden

Um einen Button mit einer Funktion zu verbinden benutzt man einfach die „clicked.connect“-Funktion und übergibt ihr die Funktion die ausgeführt werden soll, wenn man den Knopf drückt. Achtung: wenn man eine Funktion als Parameter übergibt, darf man keine Klammern schreiben. Python würde sonst denken, dass man den Rückgabewert der eingetragenen Funktion als Parameter verwendet.

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.