我正在使用Pyside构建一个基于Qt的GUI。在一个可以访问QMainWindow(_theMainWindow
)类的特定类中,该类又可以访问另外两个Qt小部件(theScan
&;theScanProgress
),我试图通过执行
def initiateScan(self):
self._theMainWindow.theScan.theScanProgress.show()
这一切都很好,出现了theScanProgress小部件。在
但是,当我添加使应用程序休眠的行(和一个print语句)时,如下所示
^{pr2}$程序似乎在小部件出现之前进入休眠状态,即time.sleep(3)
在self._theMainWindow.theScan.theScanProgress.show()
之前执行
你知道为什么会这样吗?在
这是因为主循环处理gui事件。如果不使用线程,则一次只能执行一个函数。我强烈怀疑
show
发出一个进入事件队列的信号,而这个信号又被阻塞,直到当前函数返回。在换句话说,Qt是事件驱动的,它一次只能执行一个事件。您调用的
initiateScan
在堆栈中添加了一个事件来执行函数(类似于您按下按钮,发出信号,然后触发函数),该函数可以进行一些计算,更改对象的内部状态,并将事件添加到堆栈中。show
的作用是向它的所有孩子发出一个信号,让他们向他们展示自己。要运行该代码,必须等待当前事件(具有睡眠的函数)返回。在sleep
期间,由于完全相同的原因,整个gui将没有响应。在[我可能毁了一些艺术术语]
show
只安排进度小部件的出现。但是,由于您使用sleep
阻塞了主线程,因此在您释放它之前,主线程无法执行计划的操作。在你必须使用线程或另一种方法等待3秒。在
相关问题 更多 >
编程相关推荐