Строки обратного вызова Tkinter - PullRequest
3 голосов
/ 27 марта 2011

Вот ситуация:

У меня есть файл XML с меню hiearchy для моего приложения в нем.Я могу отобразить меню, но определение обратных вызовов в файле XML возвращает только строки.

Более определенная проблема: мне нужен способ для обратного вызова функций через строку.Да, есть сделка

lambda x: pass

, но я не совсем уверен, что это то, что мне нужно.

1 Ответ

1 голос
/ 27 марта 2011

Мне нужен способ для обратного вызова функций через строку.

Из комментариев к вашему вопросу я понимаю, что вы хотели бы сделать что-то вроде:

# ...
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...