首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Pyside6事件的Lambda默认值

带有Pyside6事件的Lambda默认值
EN

Stack Overflow用户
提问于 2021-12-02 16:45:06
回答 1查看 96关注 0票数 0

我正在将一个应用程序从Python3.8.5/ PyQt5移植到:Python3.10.0/ PySide6

此代码在上下文菜单中添加多个QAction,并使用python3.8.5/ PyQt5:

代码语言:javascript
复制
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)

但是对于python3.10.0/ PySide6,当我单击QAction时会得到这个错误:

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

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

有办法在lambda中保留filepath值的副本吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-03 14:09:23

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

解决方案是使用functools.partial:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70203386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档