tkinter动态选项菜单命令不工作

2024-10-01 09:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.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的命令,因为这行代码

^{pr2}$

这附近有吗?一个OptionMenu有可能有多个命令吗?在


Tags: toname命令namesvarcolumnrootcommand
1条回答
网友
1楼 · 发布于 2024-10-01 09:24:57

你在正确的轨道上。。。但是,不必更改StringVar,您可以像这样将名称传递到selection()函数中:

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: selection(name))

# what to run when a name is selected
def selection(name):
    var.set(name)
    print "Running"  # For testing purposes to see when/if selection runs
    print name

# Option Menu for names
nameMenu = OptionMenu(root, var, ())
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()

相关问题 更多 >