I have a multi-threaded application written in Python in which one thread “takes care” of the GUI, and the other is the worker thread. However, the worker thread has two main functions (or so to say two main jobs), and I need to tell the run function which job exactly to do.
So what I had in mind was to create a run function in the worker thread which will take one parameter (save for “self). The parameter will either be “create” or upload. Without further ado, here’s the somewhat-code that I have so far:
GUI.py
class GUI(QMainWindow):
def __init__(self, parent=None):
super, etc
self.worker = worker.Worker()
def create(self):
self.worker.start()
def upload(self):
self.worker.start()
Worker.py
class Worker(QThread):
def __init__(self, parent=None):
super, etc
def run(self):
self.create_data() # OR self.upload_data(), depends
So the question is, how can I tell worker.start() which function I want it to perform? I realize one could directly use worker.run() method, but I was told by the “Rapid GUI development with PyQT” never to call worker.run() directly, and always to use worker.start().
The
startmethod ofQThreaddoesn’t accept arguments. However, you’ve inheritedQThreadso you’re free to customize it at will. So, to implement what you want, just pass arguments into the constructor ofWorker.Here’s your code sample slightly modified to show this in action: