簡體   English   中英

如何關閉 QDialog

[英]How to close a QDialog

我一直在嘗試關閉從主窗口分支出來的 QDialog 窗口。 到目前為止,以下內容對我不起作用:

self.close()
QDialog.close()

我嘗試了其他命令,例如exitexec_() ,但沒有成功。 我得到的最常見的錯誤是

[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具有相同的概念

您可以嘗試使用rejectacceptdone功能來關閉對話框。 這樣,您就可以適當地設置返回值( RejectedAccepted或您指定為參數的值)。

總而言之,您應該嘗試調用YourDialog.done(n)關閉對話框,並在希望接受/拒絕時返回nYourDialog.accept()YourDialog.reject()

我猜問題是Ui_Dialog不繼承QDialog ,所以沒有定義reject()accept()done() 我認為

class Ui_Dialog(object):

應該更改為

class Ui_Dialog(QDialog):

但是我無法測試它,因為沒有提供最少的工作示例。

由於QDialogQWidget ,並且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.

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