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

发布于 2021-01-29 16:03:34

我有一个用Python编写的多线程应用程序,其中一个线程“负责”
GUI,另一个线程是工作线程。但是,工作线程具有两个主要功能(或者说两个主要作业),我需要告诉运行功能确切地要执行哪个作业。

所以我想到的是在工作线程中创建一个运行函数,该函数将带有一个参数(保存为“ self”)。该参数要么为“
create”,要么为upload。事不宜迟,这里是我编写的代码到目前为止:

图形用户界面

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()

工人

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

  def run(self):
     self.create_data() # OR   self.upload_data(), depends

所以问题是,如何告诉worker.start()我要它执行哪个功能?我意识到可以直接使用worker.run()方法,但是“用PyQT快速进行GUI开发”告诉我,
永远不要 直接调用worker.run(),而总是使用worker.start()。

关注者
0
被浏览
218
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看