2014-01-30 126 views
1

有沒有辦法檢測當前執行是否在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

回答

1

您可以用QDialog.isVisible檢查您的對話框是否可見。通常情況下,模態對話框只有在執行時纔可見。

+0

謝謝。但是,我碰巧有一個模態對話框,但不能用exec()運行,所以在可見時運行其他Python代碼沒有問題。 – Noam

相關問題