我有点问题。我正试着制作一个监控软件来监控一些电压和其他东西。我使用Qt4Designer和pyqt来创建我的UI。
我的代码结构如下(每一个代码都是一个模块):
单击go按钮->启动中心->连接到设备并返回一个信息数组->使用信息,并在各种QLabels上显示适当的值。
我正在使用QLabels (这里的数据)设置self.label.setText。
我现在遇到的问题是,我正在尝试让go按钮启动一个循环,循环重复调用start hub模块(这个循环将从设备中获取信息,然后每隔4秒左右调用一个将这些信息打印到QLabels的模块)。
作为一种测试,我在中间有一个time.sleep(4),连续调用函数3-4次。我发现UI只在上次调用启动集线器之后才更新。
我非常肯定,问题是UI只在没有处理的情况下更新。但我不太清楚如何在每次迭代之后强制所有QLabels更新。我已经尝试过self.label.repaint(),但这没有起到任何作用。
有人能帮忙吗?
发布于 2017-01-13 04:06:51
我猜测的是,您可能会将所有任务(3-4次集线器模块调用、time.sleep和QLabels setText)放入UI更新函数,而不是将长期运行的任务打包到单独的线程中。
import threading
def LongRunningTask(self):
for i in range(4):
hub_module_call
time.sleep(4)
self.label.setText
def OnButton(self, event):
# Click go button
thread = threading.Thread(target=self.LongRunningTask)
thread.start()https://stackoverflow.com/questions/41626762
复制相似问题