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