Pyside6 事件的 Lambda 默认值
Lambda default value with Pyside6 events
我正在从以下位置移植应用程序:
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 中保留文件路径值副本的任何解决方法?
问题来自 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)
我正在从以下位置移植应用程序: 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 中保留文件路径值副本的任何解决方法?
问题来自 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)