Kapitel 28
Benutzungsoberflächen mit Qt
792
Erläuterung:
#1: Hier wird der Inhalt der Messagebox definiert. Die Parameter von QMessageBox.ques-
tion()
spezifizieren den Text der Überschrift (Achtung), den Text der Frage, die Schaltflä-
chen, die zur Auswahl stehen (Y
ES und NO), und die zu Beginn selektierte Schaltfläche (NO).
Wenn diese Anweisung ausgeführt wird, erscheint zunächst die Messagebox. Sobald der
Benutzer etwas angeklickt hat, wird ein Antwortobjekt erzeugt und der Variablen
reply
zugewiesen.
#2: Wenn die Schaltfläche YES angeklickt worden ist, wird der Event akzeptiert und das
Beenden der Anwendung veranlasst. Ansonsten wird der Event ignoriert und die Anwen-
dung wird nicht geschlossen.
28.17 Timer
Ein QTimer-Objekt (Modul PyQt5.QtCore) ist ein Taktgeber (Timer). Es sendet in regelmä-
ßigen Zeitabständen ein
timeout-Signal, das den Aufruf einer Methode auslösen kann.
Drei Dinge sind wichtig:
1. Mit Programmzeilen der Art
wird ein QTimer-Objekt erzeugt und dann mit einer Funktion oder Methode
verknüpft. Diese wird aufgerufen, wenn das
QTimer-Objekt ein timeout-Signal
sendet.
2. Mit einem Aufruf im Format
wird ein QTimer-Objekt gestartet. Als Argument wird eine ganze Zahl ms überge-
ben. Das ist die Anzahl der Millisekunden des Zeitintervalls. Nach
ms Millise-
kunden wird das
timeout-Signal das erste Mal gesendet. Danach sendet es in
Abständen von
ms Millisekunden weitere Signale.
def closeEvent(self, event):
reply = QMessageBox.question(self, "Achtung",
"Möchten Sie wirklich die Anwendung schießen?",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No) #1
if reply == QMessageBox.Yes: #2
event.accept()
else:
event.ignore()
timer = QTimer()
timer.timeout.connect(procedure)
timer.start(ms)
793
28.17
Timer
3. Mit
wird das QTimer-Objekt angehalten. Es sendet nun keine Signale mehr.
Das folgende Beispiel illustriert das Zusammenspiel von start() und stop(). Die Anwen-
dung zeigt ein Textfeld, in das man schreiben kann. Immer, wenn fünf Sekunden lang
nichts geschrieben worden ist, erscheint unter dem Textfeld ein Hinweis (Abbildung 28.17).
Dieser Hinweis verschwindet wieder, sobald der Text im Textfeld verändert worden ist.
Abb. 28.17: Textfeld mit Hinweis, der nach fünf Sekunden Untätigkeit erscheint
Skript:
timer.stop()
# writer.py
import sys, time
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import (QApplication,
QVBoxLayout, QLabel, QTextEdit, QWidget)
class Writer(QWidget):
def __init__(self):
super().__init__()
# Widgets
self.text = QTextEdit(self)
self.message = QLabel(self)
self.timer = QTimer()
# Layout
vBox = QVBoxLayout()
vBox.addWidget(self.text)

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.