Tkinter TopLevel中的OptionMenu无法正常工作

时间:2014-04-07 23:50:40

标签: python user-interface tkinter

所以,基本上我有这个代码:

class Top(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.num = 10
        self.items = range(6)
        self.pack()
        self.widgets()

    def widgets(self):
        menu = Toplevel()
        frame = Frame(menu,padx=5,pady=5)

        variables = []
        menus = []
        callbacks = []

        def assign():
            pass

        for i in range(self.num):
            Label(frame,text=str(i)).grid(sticky='W',row = i,column=0)
            variables.append(StringVar(""))
            menus.append(OptionMenu(frame,variables[i],""))
            callbacks.append(assign)
            menus[i].configure(width=10)
            menus[i].grid(sticky='W',row = i,column=1)
            for item in self.items:
                menus[i]["menu"].add_command(label=str(item),command=callbacks[i])
                variables[i].set(str(i*i))
        frame.grid()
        menu.grid()

root = Tk()
top = Top(root)
top.mainloop()

现在,当我点击其中一个条目时,它不会更改为此特定条目。我在俯瞰什么?它的结构是这样的,因为OptionMenus和回调中的条目数和相应项随每次调用而动态变化。此外,如果条目实际发生变化,获取当前条目的最佳方式是什么?

的问候,启

1 个答案:

答案 0 :(得分:1)

您没有正确使用OptionMenu。您正在删除其所有内置行为。创建OptionMenu的正确方法是在创建窗口小部件时为其提供所有项目。在内部,OptionMenu将使用每个菜单项的command属性来管理值。通过使用自己的命令创建自己的菜单项,可以防止窗口小部件正常工作。

使用菜单创建自己的menubutton没有任何问题(这就是OptionMenu的所有内容......),但如果你这样做,那么你必须要处理细节问题。确保menubutton标签与该值匹配。如果您想要自动行为,则需要使用预期使用的OptionMenu

可在此处找到体面的教程:http://effbot.org/tkinterbook/optionmenu.htm