如何检测QDialog.exec()是否处于活动状态

问题描述:

有没有办法检测当前执行是否在QDialog.exec()中间?如何检测QDialog.exec()是否处于活动状态

我是Python shell的DreamPie的作者,它可以让你在Qt GUI显示时运行Python代码。它通过运行Qt事件循环达到1/10秒,然后检查是否需要执行任何Python命令。事件循环由QTimer在超时后调用QApplication.quit()来停止。如果QDialog.exec()处于活动状态,但是我不想调用QApplication.quit(),因为它会破坏代码。当前的解决方案是通过检查QAp​​plication.activeModalWidget()是否为None来检查是否有模态对话框处于活动状态。但是,我目前有一个不与QDialog.exec()一起运行的模式对话框,并且无缘无故地阻止了Python命令。

有没有一种方法可以退出事件循环,只要它不被QDialog.exec()递归调用?

谢谢!

+0

你可以通过简单地在QTimer中执行python来阻止事件循环。 –

+0

你的对话框有拒绝/接受按钮还是只提供信息“OK”?如果只有确定按钮是对话框的“接受”按钮,则可以检查结果是否已更改为已接受。 –

+0

棘轮怪胎:的确,我可以,但这将意味着代码的重构,因为它必须在没有安装Qt的情况下工作。 – Noam

您可以用QDialog.isVisible检查您的对话框是否可见。通常情况下,模态对话框只有在执行时才可见。

+0

谢谢。但是,我碰巧有一个模态对话框,但不能用exec()运行,所以在可见时运行其他Python代码没有问题。 – Noam