python - 在 PyQt 中启动 new QThread() 时传递参数

标签 python multithreading pyqt

我有一个用 Python 编写的多线程应用程序,其中一个线程“负责”GUI,另一个线程是工作线程。然而,工作线程有两个主要功能(或者说两个主要工作),我需要告诉运行功能到底要做什么。

所以我的想法是在工作线程中创建一个运行函数,它将采用一个参数(“self”除外)。参数将是“创建”或上传。事不宜迟,这里有点 -我到目前为止的代码:

图形界面.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

所以问题是,我如何告诉 worker.start() 我希望它执行哪个功能?我意识到可以直接使用 worker.run() 方法,但是“使用 PyQT 进行快速 GUI 开发”告诉我从不直接调用 worker.run(),并且始终使用 worker.start ().

最佳答案

QThreadstart 方法不接受参数。但是,您继承了 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

关于python - 在 PyQt 中启动 new QThread() 时传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7864664/

相关文章:

java - 如何杀死等待中的正在运行的线程?

python - 如何在特定情况下抑制 sonarqube 规则?

python - pyqt QThread阻塞主线程

python - 如何在Python插件中使用多个窗口

python - 如何在文本文件中找到最小的数字 (Python 2.5)

Python Sklearn - 弃用警告

python - ValueError : Error when checking target: expected activation_7 to have shape (154, 154, 1) 但得到形状为 (200, 200, 3) 的数组

java - Eratosthenes 的并行筛选 - Java 多线程

c++ - 提高生产者消费者的并发性

python - 如何多次从带有关键字开始和结束的列表中获取子列表