[英]How to close a QDialog
我一直在嘗試關閉從主窗口分支出來的 QDialog 窗口。 到目前為止,以下內容對我不起作用:
self.close()
QDialog.close()
我嘗試了其他命令,例如exit
和exec_()
,但沒有成功。 我得到的最常見的錯誤是
[className] 對象沒有屬性“關閉”
# Creating our window
class Ui_MainWindow(object):
# Sets up GUI
def setupUi(self, MainWindow):
[GUI CODE]
# Sets text for parts of GUI
def retranslateUi(self, MainWindow):
[MORE GUI CODE]
# Function handling screencap on click and metadata for filenames
def cap_on_Click(arg1,arg2):
popup = QDialog()
popup_ui = Ui_Dialog()
popup_ui.setupUi(popup)
popup.show()
sys.exit(popup.exec_())
上面是我的主窗口
class Ui_Dialog(object):
def setupUi(self, Dialog):
[GUI CODE]
def retranslateUi(self, Dialog):
[MORE GUI CODE]
def button_click(self, arg1):
self.close()
第二個塊是對話窗口代碼。 如何關閉此對話窗口?
首先,很抱歉與C ++相關的鏈接,但是Python具有相同的概念 。
您可以嘗試使用reject
或accept
或done
功能來關閉對話框。 這樣,您就可以適當地設置返回值( Rejected
, Accepted
或您指定為參數的值)。
總而言之,您應該嘗試調用YourDialog.done(n)
關閉對話框,並在希望接受/拒絕時返回n
和YourDialog.accept()
或YourDialog.reject()
。
我猜問題是Ui_Dialog
不繼承QDialog
,所以沒有定義reject()
, accept()
和done()
。 我認為
class Ui_Dialog(object):
應該更改為
class Ui_Dialog(QDialog):
但是我無法測試它,因為沒有提供最少的工作示例。
由於QDialog
是QWidget
,並且QWidget
具有close()
方法,所以我不明白它是如何工作的。 但是,您永遠不要調用popup.exec_()
,因為它很可能需要大量代碼才能在您沒有意識到的情況下重新輸入。 不必要-執行cap_on_Click
時, cap_on_Click
在調用堆棧上運行了應用程序事件循環。
在popup.show()
,該對話框將可見並可用,直到被用戶接受或拒絕為止。 希望您設計的對話框按鈕盒的連接accepted()
和rejected()
信號對話框的accept()
和reject()
插槽。 這是Qt Creator和Qt Designer附帶的QDialog
模板的默認行為,但是您應該在查看Ui文件時進入信號/插槽編輯器模式來檢查它。
我知道已經超過 5 個月了,但我選擇在此處刪除此評論,明天可能對其他人有所幫助。 為了能夠關閉或取消打開的對話框,僅使用 self.close 將關閉整個程序。 使用這個例子:
self.dlg = QDialog(self)
self.dlg.setWindowTitle("Admin")
self.dlg.setGeometry(100,100,300,200)
btnBox = QDialogButtonBox()
btnBox.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
btnBox.rejected.connect(self.close1)
def close1():
self.dlg.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.