36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from PyQt5.QtCore import QThread, pyqtSignal
|
|
from PyQt5.QtWidgets import QProgressBar, QPushButton, QStatusBar
|
|
|
|
|
|
class GuiWorker(QThread):
|
|
finished = pyqtSignal(bool, str)
|
|
rangeChanged = pyqtSignal(int, int)
|
|
progressChanged = pyqtSignal(int)
|
|
stateChanged = pyqtSignal(str)
|
|
|
|
_button = None
|
|
|
|
def __init__(self, runnable, parent=None):
|
|
QThread.__init__(self, parent)
|
|
self._callable = runnable
|
|
|
|
def connectProgressBar(self, progress_bar: QProgressBar):
|
|
self.progressChanged.connect(progress_bar.setValue)
|
|
self.rangeChanged.connect(progress_bar.setRange)
|
|
progress_bar.setTextVisible(True)
|
|
|
|
|
|
def connectButton(self, button: QPushButton):
|
|
self._button = button
|
|
self._button.clicked.connect(self.start)
|
|
|
|
def connectStatusBar(self, statusbar: QStatusBar):
|
|
self.stateChanged.connect(lambda val: statusbar.showMessage(val))
|
|
|
|
def run(self):
|
|
if self._button:
|
|
self._button.setEnabled(False)
|
|
ret = self._callable(self)
|
|
self._button.setEnabled(True)
|
|
self.finished.emit(ret[0], ret[1])
|