Как создать меню в tkinter, используя цикл for? - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу создать меню в tkinter, в котором перечислены имена из файла CSV. Я использую лямбда-функцию, но я не могу понять, как заставить кнопки делать разные вещи. Все они делают то же самое, что и последний, так как он был создан последним. Вот некоторый код для демонстрации:

from tkinter import *

def printindex(x):
    print(x)

root = Tk()

menu = Menu(root)

file = Menu(menu)

for i in range(10):
    file.add_command(label=str(i), command=lambda: printindex(i))

menu.add_cascade(label="File", menu=file)

root.config(menu=menu)

root.mainloop()

Когда я запускаю это, все параметры в меню печатают 9.

Я хочу, чтобы все пункты меню указывали на одну и ту же функцию, но передавали их соответствующие значения. Как бы я это сделал?

1 Ответ

1 голос
/ 12 апреля 2019

Значения переменных, используемых в замыканиях, ищутся при вызове функции, и в вашем случае значение i равно 9. Вы можете изменить свою лямбда-функцию для принудительного замыкания:

command=lambda i=i: printindex(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...