(PyQt5) Interaktionsmöglichkeiten - janehlenb/Projektarbeit-ChatGPT-Python GitHub Wiki

Einführung

Willkommen zum Python Tutorial über GUI (Graphical User Interface) und speziell den Interaktionsmöglichkeiten mit der PyQt5-Bibliothek! Hier lernst du, wie du ansprechende Benutzeroberflächen erstellen kannst, die es deinen Nutzern ermöglichen, mit deinen Programmen zu interagieren, ohne dass sie Python-Experten sein müssen.

In diesem Tutorial werden wir Schritt für Schritt lernen, wie wir interaktive Elemente wie Buttons, Textfelder und Dropdown-Menüs in unsere Benutzeroberfläche einbinden können. Du wirst erstaunt sein, wie einfach es ist, komplexe Anwendungen zu erstellen, die deine Nutzer begeistern werden!

Theorie

Grundlegende GUI-Komponenten Eine GUI ermöglicht es uns, grafische Elemente zu erstellen, mit denen Benutzer einfach und intuitiv interagieren können. Wir werden uns auf einige grundlegende Komponenten konzentrieren:

  • Labels: Labels sind einfach statische Texte oder Bilder, die Informationen anzeigen.

  • Buttons: Buttons sind Interaktionselemente, die Aktionen auslösen, wenn sie geklickt werden.

  • Textfelder: Textfelder ermöglichen es dem Benutzer, Text einzugeben oder anzuzeigen.

  • Dropdown-Menüs: Dropdown-Menüs bieten eine Liste von Optionen, aus denen der Benutzer auswählen kann.

Allgemeines Code-Beispiel

Bevor wir in die spezifischen Python-Beispiele eintauchen, lassen Sie uns einen allgemeinen Code betrachten, der das Grundgerüst für unsere Benutzeroberfläche darstellt:

# Importiere die PyQt5-Bibliothek
from PyQt5.QtWidgets import QApplication, QWidget

# Erstelle eine Anwendung
app = QApplication([])

# Erstelle ein Fenster
window = QWidget()
window.setWindowTitle('Mein erstes GUI-Fenster')
window.setGeometry(100, 100, 300, 200)  # (x, y, Breite, Höhe)

# Zeige das Fenster an
window.show()

# Starte die Anwendungsschleife
app.exec()

Explizites Code-Beispiel - Ein Button hinzufügen

In diesem Beispiel fügen wir einen Button zu unserer Benutzeroberfläche hinzu, der beim Klicken eine Nachricht ausgibt:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox

app = QApplication([])

window = QWidget()
window.setWindowTitle('Button Beispiel')
window.setGeometry(100, 100, 300, 200)

# Erstelle einen Button
button = QPushButton('Klick mich!', window)
button.setGeometry(100, 80, 100, 30)

# Erstelle die Funktion, die ausgeführt wird, wenn der Button geklickt wird
def button_clicked():
    QMessageBox.information(window, 'Nachricht', 'Hurra! Du hast mich geklickt!')

# Verbinde die Funktion mit dem Klick-Event des Buttons
button.clicked.connect(button_clicked)

window.show()

app.exec()

Praxis

Leichte Aufgabe

Erstelle eine GUI-Anwendung mit PyQt5, die ein Label und einen Button enthält. Wenn der Button geklickt wird, soll das Label die Nachricht "Hallo von PyQt5!" anzeigen.

Schwere Aufgabe

Erstelle eine GUI-Anwendung, die zwei Textfelder enthält, in die der Benutzer zwei Zahlen eingeben kann. Füge dann Buttons hinzu, um die Addition, Subtraktion, Multiplikation und Division dieser Zahlen auszuführen. Das Ergebnis sollte in einem Label angezeigt werden.

Musterlösung:

Leichte Aufgabe:

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton

app = QApplication([])

window = QWidget()
window.setWindowTitle('Leichte Aufgabe')
window.setGeometry(100, 100, 300, 200)

# Erstelle ein Label
label = QLabel('Noch kein Klick!', window)
label.setGeometry(100, 80, 200, 30)

# Erstelle einen Button
button = QPushButton('Klick mich!', window)
button.setGeometry(100, 120, 100, 30)

# Erstelle die Funktion, die ausgeführt wird, wenn der Button geklickt wird
def button_clicked():
    label.setText('Hallo von PyQt5!')

# Verbinde die Funktion mit dem Klick-Event des Buttons
button.clicked.connect(button_clicked)

window.show()

app.exec()

Erklärung:

  • Import der erforderlichen Module: Es werden die benötigten Klassen und Funktionen aus der PyQt5-Bibliothek importiert, um eine GUI-Anwendung zu erstellen.
  • Initialisierung der Anwendung: Eine neue Instanz der 'QApplication'-Klasse wird erstellt, die als Grundlage für die GUI-Anwendung dient.
  • Erstellung des Hauptfensters: Ein neues 'QWidget'-Objekt wird erstellt, das das Hauptfenster der Anwendung darstellt. Der Fenstertitel wird auf "Leichte Aufgabe" gesetzt, und die Position und Größe des Fensters werden festgelegt.
  • Erstellung eines Labels: Ein 'QLabel'-Objekt wird erstellt, das eine statische Textanzeige repräsentiert. Der Text "Noch kein Klick!" wird als Standardtext angezeigt, und die Position und Größe des Labels werden festgelegt.
  • Erstellung eines Buttons: Ein 'QPushButton'-Objekt wird erstellt, das einen interaktiven Button darstellt. Der Button-Text lautet "Klick mich!", und die Position und Größe des Buttons werden festgelegt.
  • Definition der Button-Funktion: Es wird eine Funktion mit dem Namen "button_clicked" definiert. Diese Funktion ändert den Text des Labels auf "Hallo von PyQt5!", wenn der Button geklickt wird.
  • Verbindung von Button und Funktion: Die Funktion "button_clicked" wird mit dem Klick-Event des Buttons verbunden. Das bedeutet, dass die Funktion jedes Mal ausgeführt wird, wenn der Button geklickt wird.
  • Anzeigen des Fensters und Starten der Anwendungsschleife: Das Hauptfenster wird angezeigt, und die Anwendungsschleife wird gestartet, damit die Anwendung auf Benutzerinteraktionen reagieren kann.

Schwere Aufgabe:

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton

app = QApplication([])

window = QWidget()
window.setWindowTitle('Schwere Aufgabe')
window.setGeometry(100, 100, 400, 200)

# Erstelle zwei Textfelder
input1 = QLineEdit(window)
input1.setGeometry(100, 40, 100, 30)

input2 = QLineEdit(window)
input2.setGeometry(250, 40, 100, 30)

# Erstelle ein Label für das Ergebnis
result_label = QLabel('Ergebnis:', window)
result_label.setGeometry(100, 120, 200, 30)

# Erstelle die Buttons
add_button = QPushButton('Addieren', window)
add_button.setGeometry(100, 80, 80, 30)

sub_button = QPushButton('Subtrahieren', window)
sub_button.setGeometry(190, 80, 100, 30)

mul_button = QPushButton('Multiplizieren', window)
mul_button.setGeometry(310, 80, 100, 30)

div_button = QPushButton('Dividieren', window)
div_button.setGeometry(190, 120, 100, 30)

# Erstelle die Funktionen für die Rechenoperationen
def add_numbers():
    result = int(input1.text()) + int(input2.text())
    result_label.setText(f'Ergebnis: {result}')

def sub_numbers():
    result = int(input1.text()) - int(input2.text())
    result_label.setText(f'Ergebnis: {result}')

def mul_numbers():
    result = int(input1.text()) * int(input2.text())
    result_label.setText(f'Ergebnis: {result}')

def div_numbers():
    try:
        result = int(input1.text()) / int(input2.text())
        result_label.setText(f'Ergebnis: {result}')
    except ZeroDivisionError:
        result_label.setText('Division durch Null ist nicht möglich!')

# Verbinde die Funktionen mit den Klick-Events der Buttons
add_button.clicked.connect(add_numbers)
sub_button.clicked.connect(sub_numbers)
mul_button.clicked.connect(mul_numbers)
div_button.clicked.connect(div_numbers)

window.show()

app.exec()

Erklärung:

  • Es wird eine Anwendung ('QApplication') erstellt und eine leere Liste als Argument übergeben, um die GUI-Anwendung zu initialisieren.
  • Ein leeres Fenster ('QWidget') wird erstellt und mit dem Titel "Schwere Aufgabe" und den Dimensionen (400x200) versehen.
  • Zwei Textfelder ('QLineEdit') werden erstellt, in die der Benutzer Zahlen eingeben kann.
  • Ein Label ('QLabel') wird erstellt, das standardmäßig "Ergebnis:" anzeigt und später das Ergebnis der Rechenoperationen anzeigen wird.
  • Es werden vier Buttons ('QPushButton') erstellt, die die verschiedenen Rechenoperationen auslösen sollen.
  • Es werden vier Funktionen (add_numbers, sub_numbers, mul_numbers, div_numbers) definiert, die die Rechenoperationen durchführen und das Ergebnis im Label anzeigen.
  • Die Funktionen werden mit den Klick-Events der entsprechenden Buttons verknüpft, sodass die Operationen ausgeführt werden, wenn die Buttons geklickt werden.

Das Fenster wird angezeigt und die Anwendungsschleife (app.exec()) gestartet, um die Interaktion mit der GUI zu ermöglichen. Die GUI-Anwendung ermöglicht es dem Benutzer, zwei Zahlen einzugeben und die gewünschte Rechenoperation auszuwählen. Wenn einer der Buttons geklickt wird, führt die Anwendung die entsprechende Rechenoperation aus und zeigt das Ergebnis im Label an. Beachte, dass die Division durch Null abgefangen wird, um eine Fehlermeldung anzuzeigen, wenn der Benutzer versucht, durch Null zu dividieren.

Fazit

Herzlichen Glückwunsch! Du hast gerade einen Einblick in die spannende Welt der Python GUI-Programmierung mit PyQt5 erhalten. Du hast gelernt, wie du grundlegende GUI-Elemente erstellst und sie mit Funktionen verknüpfst, um interaktive Anwendungen zu erstellen. Nun bist du in der Lage, eigene Benutzeroberflächen zu entwerfen, die deine Programme noch nützlicher und benutzerfreundlicher machen. Viel Spaß beim Programmieren und sei kreativ mit deinen GUI-Projekten!