点击取消按钮时不从 QDialog 检索数据到 QMainWindow
Not retrieve data from QDialog to QMainWindow when hitting Cancel button
我正在使用 Pyside2,Python3.8
我有一个 QMainWindow
和一个 pushbutton
,当按钮是 clicked
时,一个 QDialog
出现
我想在单击“添加”按钮时检索 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_())
正如我所说,这有效,但问题是当我点击取消时它也有效。
我希望主窗口中的 func
函数 class 到 运行 仅当我点击添加按钮时才如此。
我怎样才能做到这一点?
连接到按钮时关闭 QDialogs 的正确方法是通过 accept()
and reject()
,并从 `exec() 中正确捕获 return 值。
class Dialog(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.setupUi(self)
self.AddButton.clicked.connect(<b>self.accept</b>)
self.CancelButton.clicked.connect(<b>self.reject</b>)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# ...
def showDialog(self):
d = Dialog(self)
<b>if d.exec_():
self.Data = [d.LineEdit1.text(), d.LineEdit2.text(), d.LineEdit3.text()]
self.func(self.Data)</b>
# ...
您还应该考虑使用 QDialogButtonBox。
我建议您只对 类 使用大写名称, 而不是 变量名。阅读官方Style Guide for Python Code
我正在使用 Pyside2,Python3.8
我有一个 QMainWindow
和一个 pushbutton
,当按钮是 clicked
时,一个 QDialog
出现
我想在单击“添加”按钮时检索 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_())
正如我所说,这有效,但问题是当我点击取消时它也有效。
我希望主窗口中的 func
函数 class 到 运行 仅当我点击添加按钮时才如此。
我怎样才能做到这一点?
连接到按钮时关闭 QDialogs 的正确方法是通过 accept()
and reject()
,并从 `exec() 中正确捕获 return 值。
class Dialog(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.setupUi(self)
self.AddButton.clicked.connect(<b>self.accept</b>)
self.CancelButton.clicked.connect(<b>self.reject</b>)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# ...
def showDialog(self):
d = Dialog(self)
<b>if d.exec_():
self.Data = [d.LineEdit1.text(), d.LineEdit2.text(), d.LineEdit3.text()]
self.func(self.Data)</b>
# ...
您还应该考虑使用 QDialogButtonBox。
我建议您只对 类 使用大写名称, 而不是 变量名。阅读官方Style Guide for Python Code