Если я создаю Menubutton с контрольными кнопками, созданными со списком, как я могу получить название выбранной кнопки? - PullRequest
0 голосов
/ 04 ноября 2019

Хорошо, да, этот вопрос трудно сформулировать, вот почему:

Я хочу создать меню с кнопками, созданными списком.

tflist = tf.liste
for tf in tflist:
    n1mb.menu.add_checkbutton(label=tf,command=n1change)

n1mb - это меню

n1change - это функция

def n1change():
    n1mb['text'] = tf

То, что я хочу сделать, - это чтобы кнопка меню отображала проверенную кнопку.

Проблема с показанным кодом заключается в том, что если я выберуНа кнопке меню отображается последний элемент в списке, а не выбранный.

1 Ответ

0 голосов
/ 04 ноября 2019

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