im struggling to bind tkinter options menus by category. ive made a simple to run version of the problem below. it seems to work at first. eg, in the image below you can see it succesfully categorizing by the name dave.
######## UPDATE by passing a default value into my function i got it to work, now it only uses the default value. However, it always uses this default value. i assumed it would use the value i clicked on. but it always uses the default value.
from tkinter import *
data = {"names" :["dave" , "dave" , "dave" , "bob" , "sadie" , "jessica"] , "ages":[96,96,10,11,14,26] , "sexes":["m" , "f" , "m" , "m" , "f" , "f"]}
def age_selected_func(age_selected):
print("age selected " +str(age_selected))
sexes_object['menu'].delete(0, 'end')
good_sexes = []
for s, a in zip(data['sexes'], data['ages']):
if a == age_selected:
sexes_object['menu'].add_command(label=s, command=lambda s="none": sex_selected_func(s)) ## command=lambda a <- this is the problem it doesnt know what a is , but i need to pass a into it or its useless
ages_top_label_object.set(age_selected)
def name_selected_func(name_selected):
print("name selected")
ages_object['menu'].delete(0, 'end')
good_ages = []
for n, a in zip(data['names'], data['ages']):
if n == name_selected:
ages_object['menu'].add_command(label=a, command=lambda a="none": age_selected_func(a)) ## command=lambda a <- this is the problem it doesnt know what a is , but i need to pass a into it or its useless
names_top_label_object.set(name_selected)
window=Tk()
window.geometry("800x500+10+20")
names_top_label_object = StringVar(window)
names_top_label_object.set("choose a name")
names_object = OptionMenu(window, names_top_label_object, *data["names"] , command= lambda name_selected: name_selected_func(name_selected ))
names_object.pack();
names_object.place(x=25, y=100);
ages_top_label_object = StringVar(window)
ages_top_label_object.set("choose an age")
ages_object = OptionMenu(window, ages_top_label_object, *data["ages"] , command= lambda model_c: model_selected(model_c ))
ages_object.pack();
ages_object.place(x=25, y=150);
sexes_top_label_object = StringVar(window)
sexes_top_label_object.set("choose an sex")
sexes_object = OptionMenu(window, sexes_top_label_object , *data["sexes"] , command= lambda make_c: make_selected(make_c ))# , model_top_label_object, deriv_object , deriv_top_label_object ))
sexes_object.pack();
sexes_object.place(x=25, y=200);
how can i bind these 3 drop down boxes?