【问题标题】:execute function after click OK (QDialogButtonBox)单击确定后执行功能(QDialogBu​​ttonBox)
【发布时间】:2016-02-06 11:31:35
【问题描述】:

我正在使用 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)

等等……

if __name__ == "__main__":

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

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

点击确定后如何执行功能??

【问题讨论】:

  • window.accepted.connect(some_function).
  • 谢谢,但似乎:self.buttonBox.clicked.connect(self.function(inParameter)) 不喜欢输入参数..我必须使用没有参数的函数.. ....顺便说一句,现在“取消”按钮也运行我的功能....任何解决方案?

标签: python pyqt5


【解决方案1】:

你的 buttonBox 设置应该是这样的

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

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

def accept(self):

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

【讨论】:

    【解决方案2】:

    不要连接到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))
    

    【讨论】:

    • 谢谢....为了给出一个实用的解决方案,下面的代码很好: self.buttonBox.rejected.connect(Dialog.close) self.buttonBox.accepted.connect(lambda: self. run_command("tail -f /var/log/syslog")) 如果单击“确定”将调用“tail”命令,如果单击“取消”则关闭对话框
    • 也许自从写了这个答案以来事情已经发生了变化,但我没有得到“self.accepted.connect(some_function)”作为一个有效的解决方案。
    • @KarstenChu。什么也没有变。它在 pyqt4 和 pyqt5 中对我来说仍然可以正常工作。我猜你没有意识到self.accepted 是由对话框(而不是按钮框)发出的单独的信号。因此,当单击 OK 按钮时,它会调用对话框的 accept 插槽,进而触发对话框的 accepted 信号,然后调用 some_function
    猜你喜欢
    • 2015-01-20
    • 2022-10-12
    • 2015-01-17
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多