簡體   English   中英

即使關閉后,QDialog仍會阻止鼠標輸入

[英]QDialog keeps blocking mouse input even after close

OSX El Capitan上的PyQt4 / 5

我有一個QMessageBox / QDialog,我希望它是模態的,並且想在進程運行時阻止來自其他GUI項的輸入。 QDialog應該為用戶提供取消上述過程的選項,但同時不允許他或她對GUI進行任何其他操作。

該過程完成后,應關閉QDialog並再次啟用對主應用程序的輸入。 因為顯示對話框時事情應該在后台發生,所以我沒有使用exec_()來顯示對話框。

這是我的代碼的一個簡單示例:

self.openingDialog = QtWidgets.QMessageBox(self.main_window)
self.openingDialog.setText(_(u"Opening experiment. Please wait"))
self.openingDialog.setStandardButtons(QtWidgets.QMessageBox.Cancel)
self.openingDialog.reject.connect(<some_function>)
self.openingDialog.show()
self.openingDialog.raise_()

... [Perform process] ...

self.openingDialog.done(0)
self.openingDialog.close()
self.openingDialog.deleteLater()

在顯示對話框的意義上,一切都很好,並且在顯示該對話框時,不能與其他GUI元素進行交互。 但是,完成處理后,對話框將自動關閉,但之后仍然無法與其他GUI元素進行交互。 GUI不響應鼠標單擊,無法訪問菜單項,甚至不能單擊關閉按鈕,因此需要強制退出應用程序。

自動關閉QDialog時我做錯了什么?

好的,盡管我認為這不是一個很好的解決方案,但我找到了一種解決方法。

如果我通過以下方式將窗口模式設置為“窗口模式”而不是“應用程序模式”:

self.openingDialog.setWindowModality(QtCore.Qt.WindowModal)

然后在程序關閉對話框后,應用程序重新獲得焦點和可訪問性。 當對話框是應用程序模式時,這仍然不能解決問題,但是現在這可以滿足我的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM