我可以利用Pyside clicked.connect连接具有参数的函数

mes*_*ali 3 python function click pyside qpushbutton

我想在主类中有一个函数,它不仅具有自身参数.

class Ui_Form(object):
    def clearTextEdit(self, x):
            self.plainTextEdit.setPlainText(" ")
            print("Script in Textbox is Cleaned!",)
Run Code Online (Sandbox Code Playgroud)

x将是我的附加参数,我希望通过单击调用clearTextEdit.

self.pushButton_3.clicked.connect(self.clearTextEdit(x))
Run Code Online (Sandbox Code Playgroud)

它不允许我在点击时将x作为参数写入.你能帮助我吗!

Lil*_*ung 13

解

这是一个使用lambda的完美地方:

self.pushButton_3.clicked.connect(lambda: self.clearTextEdit(x))
Run Code Online (Sandbox Code Playgroud)

请记住,connect期望一个没有参数的函数,所以我们必须在另一个函数中包含函数调用.

说明

你原来的陈述

self.pushButton_3.clicked.connect(self.clearTextEdit(x))  # Incorrect
Run Code Online (Sandbox Code Playgroud)

当你调用 self.clearTextEdit(x)时实际上是调用connect,然后你得到一个错误因为clearTextEdit没有返回没有参数的函数,这就是connect想要的.

LAMBDA?

相反,通过传递lambda: self.clearTextEdit(x),我们给出connect一个没有参数的函数,当调用时,它将调用self.clearTextEdit(x).上面的代码相当于

def callback():
    return self.clearTextEdit(x)
self.pushButton_3.clicked.connect(callback)
Run Code Online (Sandbox Code Playgroud)

但是使用lambda,我们不必命名"回调",我们只是直接传递它.

如果您想了解有关lambda函数的更多信息,可以查看此问题以获取更多详细信息.


在一个不相关的说明中,我注意到你没有x在任何地方使用clearTextEdit.是否有必要clearTextEdit首先进行争论?