|
|
|
@ -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 |
|
|
|
|