Skip to content

Instantly share code, notes, and snippets.

@rondreas
Last active November 18, 2019 15:54
Show Gist options
  • Save rondreas/aff9ceb23868e39a52b1f3566962b6f1 to your computer and use it in GitHub Desktop.
Save rondreas/aff9ceb23868e39a52b1f3566962b6f1 to your computer and use it in GitHub Desktop.
Small QWorker example
"""
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