Я хотел бы повернуть строку в словаре в вызываемую команду.Как превратить строку в команду
binds = {"<Control-n>" : 'Commands.New()'}
for n, b in binds.values():
root.bind_all(n, b)
Поэтому я хотел бы связать все словаря.
Я хотел бы повернуть строку в словаре в вызываемую команду.Как превратить строку в команду
binds = {"<Control-n>" : 'Commands.New()'}
for n, b in binds.values():
root.bind_all(n, b)
Поэтому я хотел бы связать все словаря.
Не храните команды в виде строк. На самом деле нет чистого способа их преобразования в функции, которые можно использовать с помощью bind_all
.
Вместо этого, вы должны сделать значение Словаря в быть ссылками на функцию самих объектов:
binds = {"<Control-n>" : Commands.New}
for n, b in binds.items():
root.bind_all(n, b)
Кроме того, вы должны называть dict.items
(или dict.iteritems
в Python 2.x) вместо dict.values
. Первый метод возвращает кортежи пар ключ/значение, которые вы можете распаковать, как вы делаете. Однако второй метод возвращает значения.
Он по-прежнему дает мне ту же ошибку. Трекбэк (последний последний звонок): Файл «E: \ Pusdo Code \ main.py ", строка 150, в
Я думаю, что вы хотите' blind.items() 'not' bind.values () '. – Symmitchry
А, я пропустил это. См. Мое редактирование. – iCodez
Если вы действительно хотите выполнить строку в виде кода на основе python, вы можете использовать 'exec'. Например, 'root.bind_all (n, lambda: exec (b))' –
'eval()' и 'exec()' считаются вредными и не должны использоваться. Для справки: http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html – moooeeeep
У вас есть полный контроль над содержимым словаря? Может ли кто-нибудь ввести что-то вредоносное, или даже глупо, и удалить все на своем жестком диске? Если да, не используйте 'eval'. –