【问题标题】:How to send a list from the main UI TO Qthread in Pyside, QtPy python?如何将列表从主 UI 发送到 Pyside、QtPy python 中的 Qthread?
【发布时间】:2017-03-11 16:55:24
【问题描述】:

我用 Pyside(QtPy) 编写了一个应用程序。 该应用程序允许用户: 1. 扫描路径 - 应用程序将扫描默认路径并将该路径中的现有文件夹显示为复选框列表。 2. 用户可以选择多个文件夹,然后在所有这些文件夹上执行一个进程(按钮)。

在后台: 当用户点击“进程”时,我会扫描复选框列表并仅为所选文件夹(“选中”复选框或“用户选择的文件夹”)创建一个新列表。

这些文件夹的实际进程将在 QThread 类中循环运行。

挑战是 - 我的 QThread 如何使用主 UI 方法中的“选定文件夹列表”???? 在这一点上,我能够使其工作的唯一方法是将此列表设为全局参数。主 UI 方法将值设置为全局列表,QThread 可以读取该全局列表。

我已经阅读了所有关于信号和槽的可能文档,我可以毫无问题地从 Qthread 向主 UI 发送任何我想要的东西,但我无法找到关于向线程发送数据的正确解释。

谢谢。

【问题讨论】:

  • 您应该是扩展this 答案的文件,以便数据包含在从主线程到 qthread 的信号中(它的工作方式与您所说的相反方向完全相同)怎么办)
  • 嘿,谢谢你的回复,所以只是为了确保我理解,基于此:“......将你的代码放在 QObject 的子类中并将该对象移动到标准 QThread 实例。 ..” 我需要将使用“run”方法的当前代码更改为稍后我将 moveToThread 的 QObject。
  • 好的。我将整个 QThread“运行”方法内容移动到 myWorker 中的一个新运行方法,并将其连接到线程的“启动”信号,它就像一个魅力。但是我注意到我可以用我当前的实现做同样的列表分配。很尴尬它是多么简单......我可以简单地做这样的事情:self.myQThread.list = self.myUIlist 现在我在线程中的 run 方法看到了那个列表。
  • 是的,这也是一个选项。只要确保你没有在主线程上修改列表,而线程在它上面工作。 stackoverflow.com/q/6319207 了解有关列表和线程安全的详细信息。或者,如果适用于您的应用,您可以在使用之前在 run 方法中复制列表。
  • 嘿@Arnon_Af 您究竟是如何将您的列表发送到线程本身的。我正在尝试使用 lineEdit 中的一些列表值更新我的线程,但我没有任何运气,我对如何去做感到困惑。

标签: python pyqt pyside qthread


【解决方案1】:

实际上,我最终得到了一个非常简单的解决方案。 我在线程对象中设置了我的列表,在一个新列表中。

self.runningProcess = clMyThread()  #This is my thread object
self.runningProcess.ThreadList = self.MainList

self.MainList 将是您在 UI 中作为输入获得的任何列表,而 ThreadList 是线程本身中的相同列表。

所以当你在线程运行函数中对该列表做些什么时,你可以:

for item in self.ThreadList:
    do_something()

【讨论】:

  • 嘿,谢谢,我采取了相同的方法,但似乎因为我在后台线程中运行一个循环,我的计算机升温非常快,有没有办法处理这个问题,而不会让处理器发疯?
  • 你在那里运行什么样的进程?
猜你喜欢
  • 1970-01-01
  • 2014-03-25
  • 2018-03-09
  • 1970-01-01
  • 2021-12-25
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
相关资源
最近更新 更多