2011-03-27 60 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