1 回答
TA贡献1155条经验 获得超0个赞
您正在寻找getattr:
import functools
def blockSignals(*widgetnames):
def decorator(func):
@functool.wraps(func)
def method(self, *args, **kwargs):
widgets = [getattr(self.widget, name) for name in widgetnames]
for widget in widgets:
widget.blockSignals(True)
result = func(self, *args, **kwargs)
for widget in widgets:
widget.blockSignals(False)
return result
return method
return decorator
class WidgetController(...):
def __init__(...):
self.widget.myWidget.currentIndexChanged.connect(reactToChange)
@blockSignals('myWidget')
def reactToChange(...):
...
@blockSignals('anotherWidget', 'alsoBlockThisWidget')
def anotherFunction(...):
...
您必须传递窗口小部件的名称,而不是窗口小部件本身,因为方法是在定义类时定义的,而不是在实例化实例时定义的。实例self和实际的窗口小部件在self.widget类定义时不存在。
该functools.wraps装饰机拷贝原函数的名称及其文档字符串的装饰功能。
添加回答
举报