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 import QtGui
from PyQt5.QtCore import QTimer, QObject, pyqtSignal, QThread
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel
from timebot.timebot import TimeBot 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): class TimebotMain(QWidget):
def __init__(self, timebot: TimeBot, parent=None): def __init__(self, timebot: TimeBot, parent=None):
super().__init__(parent) super().__init__(parent)
@ -15,23 +29,47 @@ class TimebotMain(QWidget):
self.setWindowIcon(QtGui.QIcon.fromTheme('face-devilish')) self.setWindowIcon(QtGui.QIcon.fromTheme('face-devilish'))
self.resize(300, 270) self.resize(300, 270)
self.text_box = QLabel() self.text_box_update_status = QLabel()
self.btnPress1 = QPushButton("Show / Refresh Status") self.btn_update_status = QPushButton("Show / Refresh Status")
self.btnPress2 = QPushButton("Button 2") self.btnPress2 = QPushButton("Button 2")
layout = QVBoxLayout() layout = QVBoxLayout()
layout.addWidget(self.text_box) layout.addWidget(self.text_box_update_status)
layout.addWidget(self.btnPress1) layout.addWidget(self.btn_update_status)
layout.addWidget(self.btnPress2) layout.addWidget(self.btnPress2)
self.setLayout(layout) 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.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): def update_status(self):
self.text_box.setText(self.timebot.status()) 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): def btnPress2_Clicked(self):
pass pass

Loading…
Cancel
Save