#!/usr/bin/python3 from PyQt5.QtCore import QTimer from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QHBoxLayout import sys class Nastav(QWidget): def __init__(self, *args, interval=None, **kwargs): # Inicializace QWidgetu samotného super().__init__(*args, **kwargs) # Intervalové nastavovátko self.label = QLabel(self) self.minusB = QPushButton(self, text="\u2212") self.minusB.clicked.connect(self.minus) self.plusB = QPushButton(self, text="+") self.plusB.clicked.connect(self.plus) # Umístění ovládacích prvků self.layout = QHBoxLayout(self) self.layout.addWidget(self.minusB) self.layout.addWidget(self.label) self.layout.addWidget(self.plusB) # Hodnota k nastavování self.interval = interval self.updateLabel() self.setLayout(self.layout) def plus(self): self.interval += 10 self.updateLabel() self.parent().updateInterval(self.interval) def minus(self): if (self.interval < 20): self.interval = 10 else: self.interval -= 10 self.updateLabel() self.parent().updateInterval(self.interval) def updateLabel(self): self.label.setText("%(kolik)d ms" % { "kolik": self.interval }) class Stopky(QWidget): def __init__(self, *args, **kwargs): # Inicializace QWidgetu samotného super().__init__(*args, **kwargs) # Interval je na začátku 1000 ms self.interval = 1000 # Výroba ovládacích prvků self.label = QLabel(self) self.button = QPushButton(self, text="start") self.button.clicked.connect(self.start) self.stopB = QPushButton(self, text="stop") self.stopB.clicked.connect(self.stop) self.nastav = Nastav(self, interval=self.interval) # Umístění ovládacích prvků self.layout = QVBoxLayout(self) self.layout.addWidget(self.label) self.layout.addWidget(self.button) self.layout.addWidget(self.stopB) self.layout.addWidget(self.nastav) # Připrav časovač self.timer = QTimer() self.timer.timeout.connect(self.tick) self.elapsed = 0 self.lastUpdate = 0 # Zobrazení stopek self.setLayout(self.layout) self.show() def start(self): # Zkopíruj interval self.interval = self.nastav.interval # Počáteční čas je nula self.elapsed = 0 self.updateLabel() # Nastartuj časovač po 10 ms self.timer.start(10) def stop(self): # Zruš časovač self.timer.stop() def tick(self): # Znovu pusť časovač self.timer.start(10) # Uběhlo dalších 10 milisekund self.elapsed += 10 # Už jsme měli zobrazovat? if self.elapsed - self.lastUpdate >= self.interval: self.updateLabel() def updateInterval(self, interval): # Nastav interval self.interval = interval # Pokud se interval snížil, možná už chceme zobrazit if self.elapsed - self.lastUpdate >= self.interval: self.updateLabel() def updateLabel(self): # Zobrazení uplynulého času (konverze na sekundy) self.label.setText("Uplynulo %(kolik).3f sekund." % { "kolik": self.elapsed / 1000.0 }) self.lastUpdate = self.elapsed # Spuštění celého programu app = QApplication(sys.argv) stopky = Stopky() app.exec()