簡體   English   中英

PyQt QDialog 返回響應是或否

[英]PyQt QDialog return response yes or no

我有一個 QDialog 類

confirmation_dialog = uic.loadUiType("ui\\confirmation_dialog.ui")[0]

class ConfirmationDialog(QDialog,confirmation_dialog):

    def __init__(self,parent=None):
        QDialog.__init__(self,parent)
        self.setupUi(self)
        message = "Hello, Dialog test"
        self.yes_button.clicked.connect(self.yes_clicked)
        self.no_button.clicked.connect(self.no_clicked)
        self.message_box.insertPlainText(message)

    def yes_clicked(self):
        self.emit(SIGNAL("dialog_response"),"yes")

    def no_clicked(self):
        self.emit(SIGNAL("dialog_response"),"no")

我有一個需要確認是否繼續的函數,但在當前的實現中,它不會等待QDialog關閉。

如何讓我的函數等待QDialog響應,然后進行相應的處理。

我想實現類似於confirm功能的東西,如下所示

def function(self):
    ....
    ....
    if self.confirm() == 'yes':
        #do something
    elif self.confirm() == 'no':
        #do something

def confirm(self):
    dialog = ConfirmationDialog()
    dialog.show()
    return #response from dialog

您將使用dialog.exec_() ,它將以模態、阻塞模式打開對話框並返回一個整數,指示該對話框是否被接受。 通常,您可能只想在對話框內調用self.accept()self.reject()來關閉它,而不是發出信號。

dialog = ConfirmationDialog()
result = dialog.exec_()
if result:  # accepted
    return 'accepted'

如果我使用對話框從用戶那里獲取一組特定的值,我通常會將它包裝在一個staticmethod ,這樣我就可以調用它並在我的應用程序的控制流中取回值,就像正常功能。

class MyDialog(...)

    def getValues(self):
        return (self.textedit.text(), self.combobox.currentText())

    @staticmethod
    def launch(parent):
        dlg = MyDialog(parent)
        r = dlg.exec_()
        if r:
            return dlg.getValues()
        return None

values = MyDialog.launch(None)

然而,在幾乎所有的情況下,我只需要向用戶展示一條消息,或者通過點擊按鈕讓他們做出選擇,或者我需要他們輸入一小段數據,我可以使用內置的靜態普通對話框類上的方法—— QMessageBoxQInputDialog

暫無
暫無

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

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