【发布时间】:2013-11-11 20:56:25
【问题描述】:
def connect(signal):
def result(func):
signal.connect(func)
return func
return inner
def safemode(msg):
def inner(func):
@wraps(func):
def result(*args, **kwargs):
print 'Args passed to func:', args, kwargs
try:
func(*args, **kwargs)
except:
print msg
return result
return inner
@connect(form.my_action.triggered)
@safemode('Something bad'?)
def my_action():
print 'Something good!'
所以,当我触发动作时,我看到:
Args passed to func: (False,) {}
Something bad?
由于my_action 不接受任何参数,因此调用func(*args, **kwargs) (其中func 是my_action)会失败。
我知道一种解决方案是删除 *args, **kwargs,但我想对 Qt GUI 函数和非 GUI 函数使用相同的装饰器。
堆栈跟踪不是很有帮助;它只显示app.exec_(),然后是发生故障的行。
False 来自哪里,我该如何解决?
【问题讨论】:
-
不太确定python部分,但我认为它是
triggered(bool)的布尔参数,请参阅qt-project.org/doc/qt-5.1/qtwidgets/qaction.html#triggered
标签: python qt pyqt signals-slots