diff --git a/timebot/gui.py b/timebot/gui.py index 7f77f45..45ad03c 100644 --- a/timebot/gui.py +++ b/timebot/gui.py @@ -1,9 +1,23 @@ from PyQt5 import QtGui +from PyQt5.QtCore import QTimer, QObject, pyqtSignal, QThread from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel from timebot.timebot import TimeBot +class Worker(QObject): + sendmsg = pyqtSignal(object) + finished = pyqtSignal() + + def __init__(self, timebot: TimeBot): + super().__init__() + self.timebot = timebot + + def run(self): + self.sendmsg.emit(self.timebot.status()) + self.finished.emit() + + class TimebotMain(QWidget): def __init__(self, timebot: TimeBot, parent=None): super().__init__(parent) @@ -15,23 +29,47 @@ class TimebotMain(QWidget): self.setWindowIcon(QtGui.QIcon.fromTheme('face-devilish')) self.resize(300, 270) - self.text_box = QLabel() - self.btnPress1 = QPushButton("Show / Refresh Status") + self.text_box_update_status = QLabel() + self.btn_update_status = QPushButton("Show / Refresh Status") self.btnPress2 = QPushButton("Button 2") layout = QVBoxLayout() - layout.addWidget(self.text_box) - layout.addWidget(self.btnPress1) + layout.addWidget(self.text_box_update_status) + layout.addWidget(self.btn_update_status) layout.addWidget(self.btnPress2) self.setLayout(layout) - self.btnPress1.clicked.connect(self.show_status) + self.btn_update_status.clicked.connect(self.update_status) self.btnPress2.clicked.connect(self.btnPress2_Clicked) - self.show_status() + self.status_timer = QTimer() + self.status_timer.timeout.connect(self.update_status) + self.status_timer.start(5000) + + self.update_status_running = False + + def update_status_started(self): + self.btn_update_status.setEnabled(False) + self.update_status_running = True + + def update_status_finished(self): + self.btn_update_status.setEnabled(True) + self.update_status_running = False - def show_status(self): - self.text_box.setText(self.timebot.status()) + def update_status(self): + if self.update_status_running: + return + self.status_thread = QThread() + self.status_worker = Worker(self.timebot) + self.status_worker.moveToThread(self.status_thread) + self.status_thread.started.connect(self.status_worker.run) + self.status_worker.finished.connect(self.status_thread.quit) + self.status_worker.finished.connect(self.status_worker.deleteLater) + self.status_thread.finished.connect(self.status_thread.deleteLater) + self.status_thread.finished.connect(lambda: self.update_status_finished()) + self.status_worker.sendmsg.connect(self.text_box_update_status.setText) + self.status_thread.start() + self.update_status_started() def btnPress2_Clicked(self): pass