Python QT Grundinfos

Qt (wie „cute“ im Englischen) ist ein auf C++ basierendes Rahmenwerk an Modulen und Bibliotheken zur plattformübergreifenden Software Entwicklung.

Ereignisschleife (event loop)

Der Kern jeder QT Anwendung ist die QApplication Klasse.
Jede Aplikation benötigt ein – und nur ein – QApplication Objekt. Dieses Objekt hält die Ereignisschleife in der App.
Das window.show() muss immer eingetragen werden. Ohne diese Aktivierung ist das Fenster nicht zu sehen.

QMainWindow hat die Möglichkeit ein Menu zu erstellen

import sys 
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Qt Demo")
        label = QLabel("Guten Tag")
        label.setAlignment(Qt.AlignmentFlag.AlignCenter)  
        self.setCentralWidget(label)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec())

Lass mich den Code für dich aufschlüsseln und erklären, was jeder Teil macht.

Importiere die notwendigen Module

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt6.QtCore import Qt
  • sys: Wird verwendet, um auf einige Systemfunktionen zuzugreifen, wie z.B. die Übergabe von Argumenten an das Programm.
  • PyQt6.QtWidgets: Importiert Klassen für grafische Benutzeroberflächen-Elemente (Widgets), wie QApplication, QMainWindow, und QLabel.
  • PyQt6.QtCore: Importiert Kernfunktionen und Klassen, einschließlich der Qt-Klasse Qt, die verschiedene Konstanten bereitstellt.

Definiere die Hauptfensterklasse

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Qt Demo")
        label = QLabel("Guten Tag")
        label.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.setCentralWidget(label)
  • class MainWindow(QMainWindow): Definiert eine Klasse MainWindow, die von QMainWindow erbt. QMainWindow ist ein Hauptfensterobjekt in einer Qt-Anwendung und bietet eine Standardfensterstruktur.
  • def init(self): Der Konstruktor der Klasse. Er wird aufgerufen, wenn eine Instanz der Klasse erstellt wird.
  • super().init(): Ruft den Konstruktor der Elternklasse (QMainWindow) auf. Das ist notwendig, um sicherzustellen, dass alle Funktionalitäten der Elternklasse initialisiert werden.
  • self.setWindowTitle(„Qt Demo“): Setzt den Fenstertitel auf „Qt Demo“.
  • label = QLabel(„Guten Tag“): Erstellt ein QLabel-Objekt mit dem Text „Guten Tag“. Ein QLabel ist ein einfaches Text- oder Bild-Element.
  • label.setAlignment(Qt.AlignmentFlag.AlignCenter): Richtet den Text im Label mittig aus. Die Ausrichtungsflagge wird mit Qt.AlignmentFlag.AlignCenter gesetzt.
  • self.setCentralWidget(label): Setzt das Label als zentrales Widget im Hauptfenster. In einem QMainWindow ist das zentrale Widget der Hauptinhalt des Fensters.

Erstelle die Anwendung und starte die Ereignisschleife

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec())
  • if name == „main“: Ein gängiges Python-Idiom, das sicherstellt, dass dieser Codeblock nur ausgeführt wird, wenn das Skript direkt gestartet wird und nicht importiert wird.
  • app = QApplication(sys.argv): Erstellt eine QApplication-Instanz. QApplication ist die Basisklasse für alle Qt-Anwendungen und wird benötigt, um die Haupt-Ereignisschleife zu starten. sys.argv ermöglicht es der Anwendung, Befehlszeilenargumente zu verarbeiten.
  • win = MainWindow(): Erstellt eine Instanz des MainWindow.
  • win.show(): Zeigt das Hauptfenster auf dem Bildschirm an.
  • sys.exit(app.exec()): Startet die Haupt-Ereignisschleife der Anwendung mit app.exec(), die Benutzereingaben verarbeitet, und beendet die Anwendung sicher, wenn das Fenster geschlossen wird, indem es sys.exit() aufruft.

Um ein Klick-Ereignis (onClick) in Python mit PyQt6 zu implementieren, können Sie die clicked-Signal-Methode eines Buttons verwenden. Hier ist eine Anleitung, wie Sie das in Ihrem bestehenden Code umsetzen können:

  1. Erstellen Sie einen Button:
button = QPushButton("Klick mich", self)
  1. Verbinden Sie das clicked-Signal mit einer Methode:
button.clicked.connect(self.on_button_click)
  1. Definieren Sie die Methode, die beim Klick ausgeführt werden soll:
def on_button_click(self):
    print("Der Button wurde geklickt!")

Hier ist ein vollständiges Beispiel, das diese Schritte in Ihrem bestehenden Code integriert:

class Beispielfenster(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)

        # Erstellen Sie einen Button
        click_button = QPushButton("Klick mich", self)
        layout.addWidget(click_button)

        # Verbinden Sie das clicked-Signal mit der on_button_click-Methode
        click_button.clicked.connect(self.on_button_click)

        # ... (Rest Ihres bestehenden UI-Codes)

    def on_button_click(self):
        print("Der Button wurde geklickt!")
        # Hier können Sie weitere Aktionen hinzufügen, die beim Klick ausgeführt werden sollen

    # ... (Rest Ihrer bestehenden Methoden)

In diesem Beispiel:

  1. Wir erstellen einen neuen Button mit dem Text „Klick mich“.
  2. Wir fügen den Button zum Layout hinzu.
  3. Wir verbinden das clicked-Signal des Buttons mit der on_button_click-Methode.
  4. Wir definieren die on_button_click-Methode, die ausgeführt wird, wenn der Button geklickt wird.

Sie können diese Struktur für jeden Button in Ihrer Anwendung wiederholen, indem Sie für jeden Button eine eigene Methode definieren oder eine allgemeine Methode verwenden, die verschiedene Aktionen basierend auf dem geklickten Button ausführt.

Um ein Klick-Ereignis (onClick) in Python mit PyQt6 zu implementieren, können Sie die clicked-Signal-Methode eines Buttons verwenden. Hier ist eine Anleitung, wie Sie das in Ihrem bestehenden Code umsetzen können:

  1. Erstellen Sie einen Button:
button = QPushButton("Klick mich", self)
  1. Verbinden Sie das clicked-Signal mit einer Methode:
button.clicked.connect(self.on_button_click)
  1. Definieren Sie die Methode, die beim Klick ausgeführt werden soll:
def on_button_click(self):
    print("Der Button wurde geklickt!")

Hier ist ein Beispiel:

class Beispielfenster(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)

        # Erstellen Sie einen Button
        click_button = QPushButton("Klick mich", self)
        layout.addWidget(click_button)

        # Verbinden Sie das clicked-Signal mit der on_button_click-Methode
        click_button.clicked.connect(self.on_button_click)

        # ... (Rest Ihres bestehenden UI-Codes)

    def on_button_click(self):
        print("Der Button wurde geklickt!")
        # Hier können Sie weitere Aktionen hinzufügen, die beim Klick ausgeführt werden sollen

    # ... (Rest Ihrer bestehenden Methoden)

In diesem Beispiel:

  1. Wir erstellen einen neuen Button mit dem Text „Klick mich“.
  2. Wir fügen den Button zum Layout hinzu.
  3. Wir verbinden das clicked-Signal des Buttons mit der on_button_click-Methode.
  4. Wir definieren die on_button_click-Methode, die ausgeführt wird, wenn der Button geklickt wird.

Sie können diese Struktur für jeden Button in Ihrer Anwendung wiederholen, indem Sie für jeden Button eine eigene Methode definieren oder eine allgemeine Methode verwenden, die verschiedene Aktionen basierend auf dem geklickten Button ausführt.

Um eine Eingabe in einer PyQt-Anwendung als Variable festzulegen, können Sie verschiedene Widgets wie QLineEdit, QTextEdit oder QPlainTextEdit verwenden. Hier ist ein Beispiel, wie Sie das mit einem QLineEdit umsetzen können:

  1. Fügen Sie ein QLineEdit-Widget zu Ihrem UI hinzu:
self.input_field = QLineEdit(self)
layout.addWidget(self.input_field)
  1. Erstellen Sie einen Button, um die Eingabe zu verarbeiten:
submit_button = QPushButton("Eingabe speichern", self)
layout.addWidget(submit_button)
submit_button.clicked.connect(self.save_input)
  1. Definieren Sie eine Methode, um die Eingabe zu speichern:
def save_input(self):
    user_input = self.input_field.text()
    # Hier können Sie user_input als Variable verwenden oder weiterverarbeiten
    print(f"Eingegebener Text: {user_input}")

Hier ist ein vollständiges Beispiel:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QLabel

class InputWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        self.input_field = QLineEdit(self)
        layout.addWidget(self.input_field)

        submit_button = QPushButton("Eingabe speichern", self)
        layout.addWidget(submit_button)
        submit_button.clicked.connect(self.save_input)

        self.result_label = QLabel("", self)
        layout.addWidget(self.result_label)

        self.setLayout(layout)
        self.setWindowTitle('Eingabe-Fenster')
        self.setGeometry(300, 300, 300, 150)

    def save_input(self):
        user_input = self.input_field.text()
        self.result_label.setText(f"Gespeicherte Eingabe: {user_input}")
        # Hier können Sie user_input als Variable verwenden oder weiterverarbeiten

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = InputWindow()
    ex.show()
    sys.exit(app.exec())

In diesem Beispiel:

  1. Wir erstellen ein QLineEdit-Widget für die Benutzereingabe.
  2. Ein „Eingabe speichern“-Button wird hinzugefügt.
  3. Wenn der Button geklickt wird, ruft er die save_input-Methode auf.
  4. In save_input wird der eingegebene Text aus dem QLineEdit geholt und in user_input gespeichert.
  5. Der gespeicherte Text wird in einem QLabel angezeigt.

Sie können die user_input-Variable nun in Ihrer Anwendung weiter verwenden, z.B. um sie in einer Datenbank zu speichern, für Berechnungen zu verwenden oder in anderen Teilen Ihrer Anwendung zu verarbeiten.

Ein Label für ein Qt-Fenster

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QLabel

class InputWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        # Titel-Label
        title_label = QLabel("Typeitin", self)
        layout.addWidget(title_label)
       
        self.setLayout(layout)
        self.setWindowTitle('Typeitin')
        self.setGeometry(10, 10, 150, 10)

    
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = InputWindow()
    ex.show()
    sys.exit(app.exec())