【问题标题】:Lambda default value with Pyside6 eventsPyside6 事件的 Lambda 默认值
【发布时间】: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 中保留文件路径值的副本的任何解决方法?

【问题讨论】:

    标签: python pyside6


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 2016-12-11
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多