PyQT - Probleme mit Countdown Uhr

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
G.Threepwood
User
Beiträge: 2
Registriert: Mittwoch 25. März 2009, 20:33

Mittwoch 25. März 2009, 20:37

Hallo zusammen!

Ich habe seit kurzem mit der Programmierung in Python begonnen und bin schwer begeistert bisher.
In meinem ersten kleinen Projekt habe ich mir einen Tea Timer, also einen Countdown Timer gebastelt, was als Kommandozeilenprogramm mit Hilfe von sleep() auch recht einfach umzusetzen war.

Nachdem ich mich jetzt aber gerade in PyQT einarbeite und mein Programm nun dort umsetzen wollte, klappt es leider nicht mehr so einfach, da mir während des Countdowns das ganze Fenster einfriert. Ich habe mir jetzt einmal die Funktionen die QT bereitstellt angeguckt, und dachte, dass ich vielleicht mit QTimer ans Ziel komme. Leider erzeugt QTimer aber ja nur ein einzelnes Signal am Ende. Ich bräuchte ja aber etwas, dass zB für einen Zeitraum X jede Sekunde ein Signal erzeugt, um so die dargestellte Restzeit sekündlich zu refreshen.

Da ich nun gerade etwas auf dem Schlauch stehe wollte ich einmal fragen, ob mir jemand vielleicht mal einen kleinen Tip geben könnte, wie ich hier weiterkomme, oder vielleicht ein ähnliches PyQT Programm kennt wo ich mal reinschielen könnte.

Gruß Marc
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Mittwoch 25. März 2009, 21:09

Das folgende Beispiel stammt aus Rapid GUI Programming with Python and Qt von Mark Summerfield und ist evtl. genau das wonach du suchst:

Code: Alles auswählen

#!/usr/bin/env python
# Copyright (c) 2007-8 Qtrac Ltd. All rights reserved.
# This program or module is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, either version 2 of the License, or
# version 3 of the License, or (at your option) any later version. It is
# provided for educational purposes and is distributed in the hope that
# it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
# the GNU General Public License for more details.

import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *

app = QApplication(sys.argv)

try:
    due = QTime.currentTime()
    message = "Alert!"
    if len(sys.argv) < 2:
        raise ValueError
    hours, mins = sys.argv[1].split(":")
    due = QTime(int(hours), int(mins))
    if not due.isValid():
        raise ValueError
    if len(sys.argv) > 2:
        message = " ".join(sys.argv[2:])
except ValueError:
    message = "Usage: alert.pyw HH:MM [optional message]" # 24hr clock

while QTime.currentTime() < due:
    time.sleep(20) # 20 seconds

label = QLabel("<font color=red size=72><b>" + message + "</b></font>")
label.setWindowFlags(Qt.SplashScreen)
label.show()
QTimer.singleShot(60000, app.quit) # 1 minute
app.exec_()
lunar

Donnerstag 26. März 2009, 00:50

Das sucht der OP ;)

Die Schleife in deinem Beispiel ist im Übrigen überflüssig, man hätte die Differenz ausrechnen und den Prozess für die gesamte verbleibende Zeit schlafen legen können, anstatt ihn alle zwanzig Sekunden aufzuwecken. Ich weiß, es ist nicht deine eigene Erfindung, aber ich wollte es gesagt haben ;)
G.Threepwood
User
Beiträge: 2
Registriert: Mittwoch 25. März 2009, 20:33

Donnerstag 26. März 2009, 18:33

Das werde ich gleich mal ausprobieren heute Abend.

Vielen Dank für die schnelle Hilfe!
Antworten