add auto refresh of status and run status_update in thread

master
Maximilian Zettler 4 years ago
parent c537ae87b7
commit 836e7d9b0e
  1. 54
      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

Loading…
Cancel
Save