单击OK后执行函数(QDialogBu​​ttonBox)

时间:2015-11-05 14:57:06

标签: python pyqt5

我在PyQT5上使用python 2.7,这是我的按钮:

self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(50, 240, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.buttonBox.clicked.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)

等...

if __name__ == "__main__":

app = QApplication(sys.argv)
window = QDialog()
ui = Ui_Dialog()
ui.setupUi(window)

window.show()
sys.exit(app.exec_())

单击OK后如何执行函数?

2 个答案:

答案 0 :(得分:8)

不要连接到buttonBox.clicked,因为每个按钮都会调用它。

您的按钮框连接应如下所示:

    self.buttonBox.accepted.connect(Dialog.accept)
    self.buttonBox.rejected.connect(Dialog.reject)

要在接受对话框时运行功能/插槽(即仅在单击“确定”按钮时),请执行以下操作:

    self.accepted.connect(some_function)

如果要传递参数,请使用lambda

    self.accepted.connect(lambda: some_function(param))

答案 1 :(得分:3)

你的buttonBox设置应该是

self.buttonBox.clicked.connect(Dialog.accept)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(Dialog.reject)

其中self.accept是在类中定义的函数。

def accept(self):

如果需要将一些参数传递给函数,则需要将这些参数存储到某些类变量中,而不是将它们作为参数传递给函数。