Pyside6 事件的 Lambda 默认值

Posted

技术标签:

【中文标题】Pyside6 事件的 Lambda 默认值【英文标题】:Lambda default value with Pyside6 events 【发布时间】:2022-01-09 04:14:36 【问题描述】:

我正在从以下位置移植应用程序: python 3.8.5 / PyQt5,到: python 3.10.0 / PySide6

此代码在上下文菜单中添加了多个 QAction,并与 python 3.8.5 / PyQt5 一起使用:

for filepath in filepaths:
    action = QtGui.QAction(QtGui.QIcon('icon.png'), filepath, self)
    action.triggered.connect(lambda checked, path=filepath: self.open_file(path))
    menu.addAction(action)

但是使用 python 3.10.0 / PySide6,当我点击 QAction 时出现此错误:

menu.<locals>.<lambda>() missing 1 required positional argument: 'checked'

我不确定它是来自 python 升级还是 PyQt5 => PySide6 更改?

在 lambda 中保留文件路径值的副本的任何解决方法?

【问题讨论】:

【参考方案1】:

问题来自 PySide6(可能已经是 PySide2),它进行了一些参数分析并且不允许使用默认值的 lambda。

解决方案是使用 functools.partial :

from functools import partial

class Example:

    def fill_menu(self, filepaths):

        for filepath in filepaths:
            action = QtGui.QAction(QtGui.QIcon('icon.png'), filepath, self)
            action.triggered.connect(partial(self.open_file, path))
            menu.addAction(action)

    def open_file(self, path):
        print(path)

【讨论】:

以上是关于Pyside6 事件的 Lambda 默认值的主要内容,如果未能解决你的问题,请参考以下文章

Ruby:lambda 函数参数可以有默认值吗?

使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败

在 Web2py 中使用 lambda 作为模型默认值

AWS lambda:如果log4j.xml中不存在环境变量,有没有办法设置默认值?

在当前事件中初始化记录默认值

php 事件日历:事件聚合器:覆盖导入范围默认值。