在PyQt中启动新的QThread()时传递参数

Bo *_*ich 4 python multithreading pyqt

我有一个用Python编写的多线程应用程序,其中一个线程"关注"GUI,另一个是工作线程.但是,工作线程有两个主要功能(或者说两个主要工作),我需要告诉run函数要完成哪个工作.

所以我想到的是在工作线程中创建一个运行函数,该函数将采用一个参数(除了"self").参数将是"创建"或上传.没有更多的麻烦,这里有一些代码,我到目前为止:

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()
Run Code Online (Sandbox Code Playgroud)

Worker.py

class Worker(QThread):
  def __init__(self, parent=None):
    super, etc

  def run(self):
     self.create_data() # OR   self.upload_data(), depends
Run Code Online (Sandbox Code Playgroud)

所以问题是,如何告诉worker.start()我希望它执行哪些功能?我意识到可以直接使用worker.run()方法,但是我用"PyQT快速GUI开发"告诉我永远不要直接调用worker.run(),并且总是使用worker.start().

Eli*_*sky 8

start方法QThread不接受参数.但是,您已经继承了,QThread因此您可以随意自定义它.因此,要实现您想要的,只需将参数传递给构造函数Worker.

这是您的代码示例稍作修改,以显示此操作:

class Worker(QThread):
  def __init__(self, do_create_data=True, parent=None):
    super(QThread, self).__init__()
    self.do_create_data = create_data

  def run(self):
     if self.create_data:
         self.create_data()
     else:
         self.upload_data(), depends
Run Code Online (Sandbox Code Playgroud)

  • @Deusdies upload_data()是同一个线程的函数?如何发送一条线作为参数? (2认同)