replace lambda with custom function callback

This commit is contained in:
Jakub Trllo 2022-03-01 11:04:10 +01:00
parent d4a43652d5
commit 79c1fe2712

View file

@ -12,6 +12,22 @@ from .lib import create_deffered_value_change_timer
from .constants import DEFAULT_PROJECT_LABEL
class _Callback:
"""Callback wrapper which stores it's args and kwargs.
Using lambda has few issues if local variables are passed to called
functions in loop it may change the value of the variable in already
stored callback.
"""
def __init__(self, func, *args, **kwargs):
self._func = func
self._args = args
self._kwargs = kwargs
def __call__(self):
self._func(*self._args, **self._kwargs)
class BaseWidget(QtWidgets.QWidget):
allow_actions = True
@ -325,7 +341,11 @@ class BaseWidget(QtWidgets.QWidget):
action = QtWidgets.QAction(project_name)
submenu.addAction(action)
actions_mapping[action] = lambda: self._apply_values_from_project(
# Use custom callback object instead of lambda
# - project_name value is changed each value so all actions will
# use the same source project
actions_mapping[action] = _Callback(
self._apply_values_from_project,
project_name
)
menu.addMenu(submenu)