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

rug*_*y82 4 python pyqt5

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

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)
Run Code Online (Sandbox Code Playgroud)

等等....

if __name__ == "__main__":

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

window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

单击OK后如何执行函数?

ekh*_*oro 8

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

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

    self.buttonBox.accepted.connect(Dialog.accept)
    self.buttonBox.rejected.connect(Dialog.reject)
Run Code Online (Sandbox Code Playgroud)

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

    self.accepted.connect(some_function)
Run Code Online (Sandbox Code Playgroud)

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

    self.accepted.connect(lambda: some_function(param))
Run Code Online (Sandbox Code Playgroud)


小智 6

你的buttonBox设置应该看起来像

self.buttonBox.clicked.connect(Dialog.accept)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(Dialog.reject)
Run Code Online (Sandbox Code Playgroud)

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

def accept(self):
Run Code Online (Sandbox Code Playgroud)

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