Last active
November 18, 2019 15:54
-
-
Save rondreas/aff9ceb23868e39a52b1f3566962b6f1 to your computer and use it in GitHub Desktop.
Small QWorker example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Small example for running a QWorker that sets a list | |
on completion. | |
""" | |
import time | |
import random | |
import sys | |
import os | |
from PySide import QtCore | |
from PySide import QtGui | |
# Shorthand to get a number 3..9 | |
size = lambda: random.randint(3, 9) | |
class Worker(QtCore.QThread): | |
signal = QtCore.Signal() | |
def __init__(self, parent=None): | |
super(Worker, self).__init__(parent) | |
def run(self): | |
# Perform long task, for now let's imitate one, | |
time.sleep(5) # wait 5 seconds, before setting result to a list of random integers | |
self.result = [random.randint(0, 256) for _ in range(size())] | |
self.signal.emit() | |
class Window(QtGui.QDialog): | |
def __init__(self): | |
super(Window, self).__init__() | |
self.worker = Worker() | |
self.worker.started.connect(self.on_worker_starting) | |
self.worker.finished.connect(self.on_worker_finish) | |
self.worker.signal.connect(self.sync) | |
# QTimer to have it run the worker every interval in miliseconds, | |
self.INTERVAL = 30000 | |
self.timer = QtCore.QTimer() | |
self.timer.setSingleShot(False) | |
self.timer.timeout.connect(self.worker.start) | |
self.timer.start(self.INTERVAL) | |
def on_worker_starting(self): | |
print("Getting to work...") | |
def on_worker_finish(self): | |
print("Work is finished!") | |
def sync(self): | |
sender = self.sender() | |
print("Printing results...") | |
for x in sender.result: | |
print(x) | |
print("... That is all.") | |
def main(): | |
app = QtGui.QApplication(sys.argv) | |
window = Window() | |
window.show() | |
sys.exit(app.exec_()) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment