1
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!'
所以,當我觸發動作,我看到:的Qt傳遞一個不需要爭論的插槽
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)'的布爾參數,請參閱http://qt-project.org/doc/qt-5.1/qtwidgets/qaction.html #triggered –