我想在主类中有一个函数,它不仅有自己的参数。
class Ui_Form(object):
def clearTextEdit(self, x):
self.plainTextEdit.setPlainText(" ")
print("Script in Textbox is Cleaned!",)
x 将是我的附加参数,我希望通过单击调用 clearTextEdit。
self.pushButton_3.clicked.connect(self.clearTextEdit(x))
它不允许我在点击时将 x 写为参数。你能帮帮我吗?
最佳答案
解决方案
这是使用 lambda 的完美地方:
self.pushButton_3.clicked.connect(lambda: self.clearTextEdit(x))
请记住,connect
需要一个没有参数的函数,因此我们必须将函数调用包装在另一个函数中。
解释
你的原话
self.pushButton_3.clicked.connect(self.clearTextEdit(x)) # Incorrect
当您调用 connect
时,实际上正在调用 self.clearTextEdit(x)
,然后您得到了一个错误,因为 clearTextEdit
不会返回没有参数的函数,这正是 connect
想要的。
lambda ?
相反,通过传递 lambda: self.clearTextEdit(x)
,我们为 connect
提供了一个没有参数的函数,该函数在被调用时将调用 self。清除文本编辑(x)
。上面的代码等同于
def callback():
return self.clearTextEdit(x)
self.pushButton_3.clicked.connect(callback)
但是对于 lambda,我们不必命名“回调”,我们直接将其传递即可。
如果您想了解更多关于 lambda 函数的信息,可以查看 this question了解更多详情。
在一个不相关的说明中,我注意到您没有在 clearTextEdit
中的任何地方使用 x
。 clearTextEdit
是否有必要首先进行参数?
关于python - 我可以利用 Pyside clicked.connect 连接一个有参数的函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23846669/