Когда кнопки проверки созданы, вы перебираете tflist
. Когда этот цикл завершен, tf
имеет значение последнего элемента в tflist
. Если вы никогда не измените tf
после этого, установка n1mb['text'] = tf
всегда будет устанавливать для текста последнее значение tflist
.
. Вместо этого вам нужно «запечь» текст, который вы хотитеустановите в command
, который вы установили. Вы можете дать дополнительные аргументы command
, используя анонимную функцию lambda
. Когда вы делаете это в цикле , вам нужно связать переменную в лямбда-вызове . Таким образом, ваша команда может выглядеть следующим образом:
command=lambda text=tf: n1change(text)
Однако такое поведение на самом деле не имеет смысла с кнопками проверки, поскольку вы можете включать и отключать их все по отдельности. Я предполагаю, что вы на самом деле хотите радио кнопки, для которых всегда активна только одна. Полный пример будет:
import tkinter as tk
root = tk.Tk()
v = tk.IntVar()
n1mb = tk.Menubutton(root, text="condiments", relief=tk.RAISED)
n1mb.grid()
def n1change(tf):
n1mb['text'] = tf
n1mb.menu = tk.Menu(n1mb, tearoff=0)
n1mb["menu"] = n1mb.menu
tflist = ['a', 'b', 'c']
for tf in tflist:
n1mb.menu.add_radiobutton(label=tf, command=lambda text=tf: n1change(text))
n1mb.pack()
root.mainloop()