PyQt QDialog返回响应是或否

时间:2016-05-24 11:05:30

标签: python pyqt

我有一个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

1 个答案:

答案 0 :(得分:3)

您将使用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)

然而,在几乎所有我需要向用户显示消息的情况下,或者让他们通过单击按钮做出选择,或者我需要他们输入一小段数据,我可以使用内置的-in普通对话框类的静态方法 - QMessageBoxQInputDialog