2011-03-27 59 views
3

這裏的情況:Tkinter字符串回調

我有一個XML文件,其中包含我的應用程序的菜單。我可以顯示菜單,但是在XML文件中定義回調只返回字符串。

定義更多的問題: 我需要一種通過字符串來回調函數的方法。是的,有

lambda x: pass 

交易,但我不知道這就是我需要的。

+0

字符串是什麼樣的? – delnan 2011-03-27 00:30:18

+1

那麼,getattr可能會起作用,但那樣會變得很醜陋。 – LaserDude11 2011-03-27 00:32:25

+0

它們是回調函數的名稱:「self.logic.account_new」就是一個例子。 – LaserDude11 2011-03-27 00:37:48

回答

1

我需要一種方法來回調函數通過一個字符串。

從我的理解是你想要做類似的評論你的問題:

# ... 
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 
+0

謝謝。這應該像一個魅力! – LaserDude11 2011-03-27 16:00:07