所以,基本上我有这个代码:
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和回调中的条目数和相应项随每次调用而动态变化。此外,如果条目实际发生变化,获取当前条目的最佳方式是什么?
的问候,启
答案 0 :(得分:1)
您没有正确使用OptionMenu
。您正在删除其所有内置行为。创建OptionMenu
的正确方法是在创建窗口小部件时为其提供所有项目。在内部,OptionMenu
将使用每个菜单项的command
属性来管理值。通过使用自己的命令创建自己的菜单项,可以防止窗口小部件正常工作。
使用菜单创建自己的menubutton没有任何问题(这就是OptionMenu的所有内容......),但如果你这样做,那么你必须要处理细节问题。确保menubutton标签与该值匹配。如果您想要自动行为,则需要使用预期使用的OptionMenu
。
可在此处找到体面的教程:http://effbot.org/tkinterbook/optionmenu.htm