Я использую python 2.7.9, и моя текущая проблема заключается в том, что по какой-то причине моя команда OptionMenu
не работает. Ниже приведен пример кода того, что я имею в виду.
from Tkinter import *
root = Tk()
var = StringVar()
var.set("Choose a name...")
names = []
# Appends names to names list and updates OptionMenu
def createName(n):
names.append(n)
personName.delete(0, "end")
menu = nameMenu['menu']
menu.delete(0, "end")
for name in names:
menu.add_command(label=name, command=lambda name=name: var.set(name))
# what to run when a name is selected
def selection():
print "Running" # For testing purposes to see when/if selection runs
print var.get()
# Option Menu for names
nameMenu = OptionMenu(root, var, (), command=lambda: selection())
nameMenu.grid(row=0, column=0, columnspan=2)
nameMenu.config(width=20)
# Entry for user to submit name
Label(root, text="Name").grid(row=1, column=0)
personName = Entry(root, width=17)
personName.grid(row=1, column=1)
# Add person Button
Button(root, text="Add Person", width=20, command=
lambda: createName(personName.get())).grid(row=5, column=0, columnspan=2)
mainloop()
Цель этой теоретической программы состоит в том, чтобы просто добавить имя к OptionMenu
, а затем, когда вы выберете имя, оно напечатает его. Я могу добавить имена в OptionMenu
, но когда придет время для OptionMenu
запускать функцию selection()
, этого не произойдет.
Теперь мое лучшее предположение о том, что не так, заключается в том, что функция createName()
, которую вызывает кнопка, также использует команду OptionMenu
из-за строки
menu.add_command(label=name, command=lambda name=name: var.set(name))
Есть ли что-нибудь вокруг этого? Возможно ли, чтобы OptionMenu
имел несколько команд?