Ganz einfacher Startcountdown
Verfasst: Sonntag 6. Januar 2019, 01:40
Hallo
Ich habe mir heute einen ganz einfachen Startcountdown geschrieben. Nach dem Ablauf der Zeit wird der Startcountdown gelöscht und eine andere Methode mit weiteren Anweisungen (hier beispielhaft zum Zeichnen eines roten Rechtecks) aufgerufen. Wie findet ihr das?
Code:
Gruß
Atalanttore
Ich habe mir heute einen ganz einfachen Startcountdown geschrieben. Nach dem Ablauf der Zeit wird der Startcountdown gelöscht und eine andere Methode mit weiteren Anweisungen (hier beispielhaft zum Zeichnen eines roten Rechtecks) aufgerufen. Wie findet ihr das?
Code:
Code: Alles auswählen
import time
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene
from PyQt5.QtGui import QPainterPath
class Countdown:
COUNTDOWN = 5
def __init__(self, scene):
self.scene = scene
self._time = 0
self._text = None
def update(self, elapsed):
self._time += elapsed
if self._text:
self.scene.removeItem(self._text)
self._time = self.COUNTDOWN - elapsed
self._text = self.scene.addText(f"Noch {self._time:.2f} Sekunden")
return self._time <= 0
class Rectangle:
def __init__(self, scene):
self.scene = scene
path = QPainterPath()
path.addRect(0,0,100,100)
self._path = scene.addPath(path)
self._path.setBrush(QtCore.Qt.red)
class GraphicsWindow(QGraphicsView):
def __init__(self, parent=None):
super(GraphicsWindow, self).__init__(parent)
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.scene.setSceneRect(-400, -400, 800, 800)
self.start_countdown = Countdown(self.scene)
self._last = time.monotonic()
self.setCacheMode(QGraphicsView.CacheBackground)
self._timer = QtCore.QTimer(self)
self._timer.setSingleShot(False)
self._timer.setInterval(1000 / 60)
self._timer.timeout.connect(self._update_countdown)
self._timer.start()
def _update_countdown(self):
_now = time.monotonic()
_elapsed = _now - self._last
countdown_expired = self.start_countdown.update(_elapsed)
if countdown_expired:
self._timer.stop()
self.scene.clear()
del self.start_countdown
self._next_instruction()
def _next_instruction(self):
self.rectangle = Rectangle(self.scene)
# Weitere Anweisungen
def main():
app = QApplication(sys.argv)
graphics_window = GraphicsWindow()
graphics_window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Atalanttore