我在表Geo_Cat上的数据库中保存了类别。我知道我的geo_list已正确填充,因为我能够更早地创建OptionMenu。我也打印了列表,它起作用了。因此查询很好。但是,我需要一次可以选择多个选项,而需要使用MenuButton。我需要的选项是无和表中的类别。我已经能够添加“无”复选框,但是我却无法添加geo_list。下面是代码摘录:
from Tkinter import *
root = Tk()
location_frame = Frame(root)
location_frame.grid(column=0, row=0, sticky=(N, W, E, S))
location_frame.columnconfigure(0, weight=1)
location_frame.rowconfigure(0, weight=1)
location_frame.pack(pady=25, padx=50)
geo_list= ["geo1","geo2","geo3","geo4"]
amb = Menubutton(location_frame,text="Geo Category", relief=RAISED)
amb.grid(sticky="ew", row=1,column=0)
amb.menu = Menu(amb,tearoff=0)
amb['menu'] = amb.menu
Item0 = IntVar()
amb.menu.add_checkbutton(label="None", variable=Item0)
location_vars = {}
for category in geo_list:
location_vars["Item{0}".format(category)] = IntVar()
amb.menu.add_checkbutton(label=geo_list[category])
amb.pack()
root.mainloop()
我也尝试过:
location_vars["Item{0}".format(category)] = IntVar()
amb.menu.add_checkbutton(label=geo_list[category],
variable=location_vars["Item{0}".format(category)])
如何将我的geo_list添加到检查按钮?任何建议将不胜感激。
答案 0 :(得分:0)
如果要将geo_list
中的项目用作菜单标签,为什么不直接设置它们呢?您已经遍历了它们:
amb.menu.add_checkbutton(label=category)
另外,不要在最后包装包裹。您已经将它网格化了。
我正在添加一个示例,该示例如何跟踪与每个菜单项关联的更改。我对代码进行了些微更改,但是我认为您可以毫无疑问地获得大致的想法。
我使用的是BooleanVar()
而不是IntVar()
,然后使用键location_vars
将每个变量保存在"Item{0}".format(category)
中。最后,我为每个菜单项中的更改设置了跟踪,以跟踪到回调函数,该回调函数将检查选择。
这是你的追求吗?
from tkinter import *
root = Tk()
amb = Menubutton(root, text="Geo Category", relief=RAISED)
amb.pack(padx=50, pady=25)
amb.menu = Menu(amb, tearoff=0)
amb['menu'] = amb.menu
def callback(*args):
# Callvack function is called when menu items are changed
for key, value in location_vars.items():
print(key, value.get())
print() # To make the printout more readable
geo_list= ["None","geo1","geo2","geo3","geo4"]
location_vars = {}
for category in geo_list:
location_vars["Item{0}".format(category)] = BooleanVar()
# Set "variable" for every menu item
amb.menu.add_checkbutton(label=category,
variable=location_vars["Item{0}".format(category)])
# Trace changes in the variables
location_vars["Item{0}".format(category)].trace("w", callback)
root.mainloop()