Добавление параметров кнопки проверки из базы данных с помощью Tkinter Menubutton - PullRequest
0 голосов
/ 14 октября 2018

У меня есть категории, сохраненные в базе данных на таблице 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 голосов
/ 14 октября 2018

Если вам нужны элементы в geo_list для ярлыков меню, почему бы просто не установить их;вы уже зацикливаетесь на них:

amb.menu.add_checkbutton(label=category)

Кроме того, не упаковывайте amb в самом конце;Вы уже сделали это раньше.

Я добавляю пример того, как отслеживать изменения, связанные с каждым пунктом меню.Я немного изменил код, но думаю, у вас не возникнет проблем с получением общего представления.

Я использую 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...