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
, undQLabel
. - 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 vonQMainWindow
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“. EinQLabel
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 essys.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:
- Erstellen Sie einen Button:
button = QPushButton("Klick mich", self)
- Verbinden Sie das
clicked
-Signal mit einer Methode:
button.clicked.connect(self.on_button_click)
- 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:
- Wir erstellen einen neuen Button mit dem Text „Klick mich“.
- Wir fügen den Button zum Layout hinzu.
- Wir verbinden das
clicked
-Signal des Buttons mit deron_button_click
-Methode. - 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:
- Erstellen Sie einen Button:
button = QPushButton("Klick mich", self)
- Verbinden Sie das
clicked
-Signal mit einer Methode:
button.clicked.connect(self.on_button_click)
- 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:
- Wir erstellen einen neuen Button mit dem Text „Klick mich“.
- Wir fügen den Button zum Layout hinzu.
- Wir verbinden das
clicked
-Signal des Buttons mit deron_button_click
-Methode. - 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:
- Fügen Sie ein QLineEdit-Widget zu Ihrem UI hinzu:
self.input_field = QLineEdit(self)
layout.addWidget(self.input_field)
- 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)
- 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:
- Wir erstellen ein QLineEdit-Widget für die Benutzereingabe.
- Ein „Eingabe speichern“-Button wird hinzugefügt.
- Wenn der Button geklickt wird, ruft er die
save_input
-Methode auf. - In
save_input
wird der eingegebene Text aus dem QLineEdit geholt und inuser_input
gespeichert. - 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())