Динамично создавая меню в Tkinter. (лямбда-выражения?)

Существует замечательный пакет под названием shared_preferences , разработанный командой Flutter, который обрабатывает это на iOS и Android без необходимости касаться базы собственного кода!

Я не могу сказать, если вы Вы используете его из своего кода, но если нет, я настоятельно рекомендую проверить его.

6
задан MatrixFrog 8 April 2009 в 02:59
поделиться

2 ответа

В первую очередь, Ваша проблема не имеет никакого отношения к Tkinter; лучше при сокращении его вниз до простой части кода, демонстрирующего проблему таким образом, можно экспериментировать с ним более легко. Вот упрощенная версия того, что Вы делаете это, я экспериментировал с. Я заменяю dict вместо меню, чтобы помочь записать небольшой тестовый сценарий.

items = ["stack", "over", "flow"]
map = { }

for item in items:
    def new_command():
        print(item)

    map[item] = new_command

map["stack"]()
map["over"]()
map["flow"]()

Теперь, когда мы выполняем это, как Вы сказали, мы добираемся:

flow
flow
flow

Проблемой здесь является понятие Python объема. В частности, for оператор не представляет новый уровень объема, ни новую привязку для item; таким образом, это обновляет то же item переменная каждый раз через цикл и весь из new_command() функции относятся к тому же самому объекту.

То, что необходимо сделать, представляют новый уровень объема, с новой привязкой, для каждого из items. Самый легкий способ сделать, который должен перенести его в новое функциональное определение:

for item in items:
    def item_command(name):
        def new_command():
            print(name)
        return new_command

    map[item] = item_command(item)

Теперь при замене этим в предыдущую программу Вы получаете желаемый результат:

stack
over
flow
7
ответ дан 10 December 2019 в 02:53
поделиться

Такой вещью является настоящая типичная проблема в Tkinter, я думаю.

Попробуйте это (в соответствующей точке):

def new_command(tag=tag):
    self.add_tag(tag)
2
ответ дан 10 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: