使用python pyqt的线程?

时间:2014-10-01 09:43:13

标签: python multithreading pyqt pyqt4 usrp

我正在尝试使用pyqt4在python中创建一个GUI,它包含一个与USRP连接的瀑布接收器。问题是数据应该连续显示在瀑布接收器中,这会使GUI冻结,同时我不能使用其他按钮。我正在检查使用线程,但到目前为止我所理解的是,在线程中我可以只放置将在最后给出结果的函数,而不是将连续给出结果的函数,我想在主GUI中看到它

任何想法如何能够看到瀑布接收器的连续结果,而不是冻结主GUI。

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点,但基本上都是

  1. 将您的瀑布池分解为大量工作,GUI可以定期执行。例如,不是在GUI调用的函数中连续更新瀑布接收器,而是仅具有“短”更新(一个“时间步长”),并且具有刚刚返回的函数;通过QTimer定期调用该函数。
  2. 使用在QThread实例中实例化的QObject,使瀑布接收器在单独的线程中执行;并使接收器功能以规则的间隔发出信号,例如在瀑布更新的每个“时间步长”。

答案 1 :(得分:-1)

您可以从QThread派生一个班级。在run函数中进行处理并将数据存储在某些数据结构中。从主线程启动此线程,并通过适当的同步从此数据结构中获取数据。这样处理不会冻结您的主UI线程。

一些参考资料

Background thread with QThread in PyQt

Example of the right way to use QThread in PyQt?