python - 我可以利用 Pyside clicked.connect 连接一个有参数的函数吗

标签 python function pyside qpushbutton click

我想在主类中有一个函数,它不仅有自己的参数。

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 中的任何地方使用 xclearTextEdit 是否有必要首先进行参数?

关于python - 我可以利用 Pyside clicked.connect 连接一个有参数的函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23846669/

相关文章:

java - Spring Data JPA 调用 Oracle 函数

python - PySide:创建自定义 QCursor

python - PySide(或 PyQt)信号和槽基础知识

python - 使用 OAuth 2.0 简单注册+登录

c++ - 如何使大量现有功能在类的范围内可用?

python - 使用 Popen 和启动/等待在 python 中运行子进程时无法获取退出代码

javascript - 如何创建 Javascript Function 类的子类?

python - QT 系统托盘应用程序中的更新菜单

python - 用 Python re 替换为自定义函数

python - 如何在 Pandas 中对数据框进行分组并保留列