3
這裏的情況:Tkinter字符串回調
我有一個XML文件,其中包含我的應用程序的菜單。我可以顯示菜單,但是在XML文件中定義回調只返回字符串。
定義更多的問題: 我需要一種通過字符串來回調函數的方法。是的,有
lambda x: pass
交易,但我不知道這就是我需要的。
這裏的情況:Tkinter字符串回調
我有一個XML文件,其中包含我的應用程序的菜單。我可以顯示菜單,但是在XML文件中定義回調只返回字符串。
定義更多的問題: 我需要一種通過字符串來回調函數的方法。是的,有
lambda x: pass
交易,但我不知道這就是我需要的。
我需要一種方法來回調函數通過一個字符串。
從我的理解是你想要做類似的評論你的問題:
# ...
callback_str = getcallback_str() # e.g., 'self.logic.account_new'
callback = eval_dottedname(self, callback_str)`
在這種情況下eval_dottedname()
功能可以實現爲:
def eval_dottedname(obj, dottedname):
if dottedname.partition(".")[0] != 'self': # or some other criteria
# to limit the context
raise ValueError
return reduce(getattr, dottedname.split('.')[1:], obj)
更好方法是將字符串回調限制爲簡單標識符,並使用派發表,如stdlib的cmd
module:
def dispatch(self, callback_str):
return getattr(self, 'do_' + callback_str, self.default)()
def do_this(self):
pass
def do_that(self):
pass
謝謝。這應該像一個魅力! – LaserDude11 2011-03-27 16:00:07
字符串是什麼樣的? – delnan 2011-03-27 00:30:18
那麼,getattr可能會起作用,但那樣會變得很醜陋。 – LaserDude11 2011-03-27 00:32:25
它們是回調函數的名稱:「self.logic.account_new」就是一個例子。 – LaserDude11 2011-03-27 00:37:48