我正在将一个应用程序从Python3.8.5/ PyQt5移植到:Python3.10.0/ PySide6
此代码在上下文菜单中添加多个QAction,并使用python3.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)但是对于python3.10.0/ PySide6,当我单击QAction时会得到这个错误:
menu.<locals>.<lambda>() missing 1 required positional argument: 'checked'
我不确定它是来自python升级还是PyQt5 => PySide6更改?
有办法在lambda中保留filepath值的副本吗?
发布于 2021-12-03 14:09:23
问题来自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)https://stackoverflow.com/questions/70203386
复制相似问题