Tkinter 字符串回调

3 投票
1 回答
794 浏览
提问于 2025-04-16 14:29

这里是情况:

我有一个XML文件,里面包含了我应用程序的菜单结构。我可以显示这个菜单,但在XML文件中定义的回调函数只能返回字符串。

更具体的问题是:

我需要一种方法,通过字符串来调用函数。是的,有这个

lambda x: pass

的东西,但我不太确定这是否是我需要的。

1 个回答

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)

更好的方法是把字符串回调限制为简单的标识符,并使用一个调度表,就像标准库中的 cmd 模块

  def dispatch(self, callback_str):
      return getattr(self, 'do_' + callback_str, self.default)()      

  def do_this(self):
      pass

  def do_that(self):
      pass

撰写回答