我在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后如何执行函数?
答案 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):
如果需要将一些参数传递给函数,则需要将这些参数存储到某些类变量中,而不是将它们作为参数传递给函数。