Tkinter字符串回调

时间:2011-03-27 00:28:53

标签: python function menu tkinter

情况如下:

我有一个XML文件,其中包含我的应用程序的菜单hiearchy。我可以显示菜单,但在XML文件中定义回调只返回字符串。

更明确的问题: 我需要一种通过字符串回调函数的方法。 <是啊,那是

lambda x: pass
交易,但我并不确定这是我需要的。

1 个答案:

答案 0 :(得分: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