使用Tkinter菜单按钮从数据库添加检查按钮选项

时间:2018-10-14 00:31:03

标签: python tkinter

我在表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)]) 

enter image description here

如何将我的geo_list添加到检查按钮?任何建议将不胜感激。

1 个答案:

答案 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()