点击取消按钮时不从 QDialog 检索数据到 QMainWindow

问题描述

我使用的是 Pyside2,Python 3.8

我有一个带有 QMainWindowpushbutton,当按钮是 clicked 时,会出现一个 QDialog

My Dialog form

我想在单击“添加”按钮时检索 QLineEdits 中的文本。我设法使用以下代码做到了这一点:

class Dialog(QtWidgets.QDialog,Ui_Dialog):
    def __init__(self,parent=None):
        super(Dialog,self).__init__(parent)
        self.setupUi(self)
        self.AddButton.clicked.connect(self.close)
        self.CancelButton.clicked.connect(self.close)

class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self,parent=None):
        super(MainWindow,self).__init__(parent)
        self.setupUi(self)
        self.ShowDialogButton.clicked.connect(self.showDialog)

    def showDialog(self):
        d = Dialog(self)
        d.exec_()
        self.Data = [d.LineEdit1.text(),d.LineEdit2.text(),d.LineEdit3.text()]
        self.func(self.Data)

    def foo(self,foo):
        for txt in foo:
            print(txt)

if __name__== '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit(app.exec_())

正如我所说,这有效,但问题是当我点击取消时它也有效。

我希望 MainWindow 类中的 func 函数仅在我点击添加按钮时运行。

我怎样才能做到这一点?

解决方法

连接到按钮时关闭 QDialogs 的正确方法是通过 accept()reject(),并正确捕获来自 `exec() 的返回值。

class Dialog(QtWidgets.QDialog,Ui_Dialog):
    def __init__(self,parent=None):
        super(Dialog,self).__init__(parent)
        self.setupUi(self)
        self.AddButton.clicked.connect(self.accept)
        self.CancelButton.clicked.connect(self.reject)


class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    # ...
    def showDialog(self):
        d = Dialog(self)
        if d.exec_():
            self.Data = [d.LineEdit1.text(),d.LineEdit2.text(),d.LineEdit3.text()]
            self.func(self.Data)

    # ...

您还应该考虑使用 QDialogButtonBox

我建议你只对类使用大写的名字,不要为变量名使用。阅读有关官方 Style Guide for Python Code

的更多信息

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...