Python 我需要在同一个tkinter组合框上执行多个bind语句,但只有第一个可以工作

Python 我需要在同一个tkinter组合框上执行多个bind语句,但只有第一个可以工作,python,tkinter,combobox,binding,Python,Tkinter,Combobox,Binding,我正试图将多个绑定语句放到一个组合框中,但它不起作用 我有一个tkinter窗口,可以将数据输入到sql数据库中,该窗口带有几个相关的组合框,以便在输入错误时会导致致命错误的地方更容易地输入数据。“州名称”组合框将在一个组合框中对州缩写进行排队,并在另一个组合框中对该州可用的国家公园名称进行排队。然后,选择的park会触发另一个组合框,其中唯一的选项应该是park缩写。我遇到的问题是将州缩写和公园名称组合框绑定到州组合框。它们在两个单独的语句中,我一次只能得到一个。为了使用公园名称和公园缩写组合

我正试图将多个绑定语句放到一个组合框中,但它不起作用

我有一个tkinter窗口,可以将数据输入到sql数据库中,该窗口带有几个相关的组合框,以便在输入错误时会导致致命错误的地方更容易地输入数据。“州名称”组合框将在一个组合框中对州缩写进行排队,并在另一个组合框中对该州可用的国家公园名称进行排队。然后,选择的park会触发另一个组合框,其中唯一的选项应该是park缩写。我遇到的问题是将州缩写和公园名称组合框绑定到州组合框。它们在两个单独的语句中,我一次只能得到一个。为了使用公园名称和公园缩写组合框,我必须注释掉州缩写绑定,反之亦然。有什么想法吗

from tkinter import *
from tkinter import ttk
# list of states
states = ['Alaska', 'Arizona', 'Arkansas']
# dictionaries
STATE_DICT = {
        'state_name': {
            'AK': 'Alaska',
            'AR': 'Arkansas',
            'AZ': 'Arizona'}
    }
PARKS_DICT = {
    'state_name': {
        'DENA': 'Alaska',
        'GLBA': 'Alaska',
        'KATM': 'Alaska',
        'KEFJ': 'Alaska',
        'HOSP': 'Arkansas',
        'GRCA': 'Arizona',
        'PEFO': 'Arizona',
        'SAGU': 'Arizona'
        },
    'park_name': {
        'DENA': 'Denali National Park',
        'GLBA': 'Glacier Bay National Park',
        'KATM': 'Katmai National Park',
        'KEFJ': 'Kenai Fjords National Park',
        'HOSP': 'Hot Springs National Park',
        'GRCA': 'Grand Canyon National Park',
        'PEFO': 'Petrified Forest National Park',
        'SAGU': 'Saguaro National Park'}
}
root2 = Tk()
root2.title("data_entry_form")
root2.geometry("800x500")

state_name_label = Label(root2, text="State Name", width=20, font=("bold", 12),bd=1, relief="raised")
state_abbr_label =  Label(root2, text="State Abbr", width=20, font=("bold", 12),bd=1, relief="raised")
park_name_label =  Label(root2, text="Park Name", width=20, font=("bold", 12),bd=1, relief="raised")
park_abbr_label =  Label(root2, text="Park Abbr", width=20, font=("bold", 12),bd=1, relief="raised")
nearest_city_label =  Label(root2, text="Nearest City", width=20, font=("bold", 12),bd=1, relief="raised")
geo_location_label =  Label(root2, text="Geo Location", width=20, font=("bold", 12),bd=1, relief="raised")
hike_name_label = Label(root2, text="Hike Name", width=20, font=("bold", 12),bd=1, relief="raised")
length_miles_label =  Label(root2, text="Length in Miles", width=20, font=("bold", 12),bd=1, relief="raised")
elevation_gain_feet_label =  Label(root2, text="Elevation in Feet", width=20, font=("bold", 12),bd=1, relief="raised")
nps_difficulty_rating_label =  Label(root2, text="NPS Difficulty Rating", width=20, font=("bold", 12),bd=1, relief="raised")
route_type_label =  Label(root2, text="Route Type", width=20, font=("bold", 12),bd=1, relief="raised")
# Data entry fields
hike_name_entry = Entry(root2,width=100)
nearest_city_entry = Entry(root2,width=50)
geo_location_entry = Entry(root2,width=50)
length_miles_entry = Entry(root2,width=50)
elevation_gain_feet_entry = Entry(root2,width=50)
# submit button
submitbutton = Button(root2, text='Submit New Hike!', width=20, bg="black", fg='white')
# comboboxes
def parks_list(e):
    p=list()
    x=list()
    for key,value in PARKS_DICT['state_name'].items():
        if value==state_combo.get():
            p.append(key)
    for k,v in PARKS_DICT['park_name'].items():
        if k in p:
            x.append(v)
            park_combo.config(value=x)
def park_abb(e):
    p=list()
    for key,value in PARKS_DICT['park_name'].items():
        if value==park_combo.get():
            p.append(key)
            park_abbr_combo.config(value=p)
def state_abb(e):
    p=list()
    for key,value in STATE_DICT['state_name'].items():
        if value==state_combo.get():
            p.append(key)
            state_abbr_combo.config(value=p)
state_combo = ttk.Combobox(root2, value=states)
state_combo.current(0)

#state_combo.bind("<<ComboboxSelected>>", state_abb) #-have to # this out to get the other statement to work.
state_combo.bind("<<ComboboxSelected>>", parks_list)

state_abbr_combo = ttk.Combobox(root2, value=[" "])
state_abbr_combo.current(0)

park_combo = ttk.Combobox(root2, value=[" "])
park_combo.current(0)
park_combo.bind("<<ComboboxSelected>>", park_abb)

park_abbr_combo = ttk.Combobox(root2, value=[" "])
park_abbr_combo.current(0)

nps_difficulty_rating= ttk.Combobox(root2, value =range(1,6))
route_type_combo=ttk.Combobox(root2, value=['loop','out and back','point to point'])
# Grid placement
state_name_label.grid(row=1, column=0, padx=10, pady=10)
state_combo.grid(row=1, column=1, padx=10, pady=10)
state_abbr_label.grid(row=2, column=0, padx=10, pady=10)
state_abbr_combo.grid(row=2, column=1, padx=10, pady=10)
park_name_label.grid(row=3, column=0, padx=10, pady=10)
park_combo.grid(row=3, column=1, padx=10, pady=10)
park_abbr_label.grid(row=4, column=0, padx=10, pady=10)
park_abbr_combo.grid(row=4, column=1, padx=10, pady=10)
nearest_city_label.grid(row=5, column=0, padx=10, pady=10)
nearest_city_entry.grid(row=5, column=1, padx=10, pady=10)
geo_location_label.grid(row=6, column=0, padx=10, pady=10)
geo_location_entry.grid(row=6, column=1, padx=10, pady=10)
hike_name_label.grid(row=7, column=0, padx=10, pady=10)
hike_name_entry.grid(row=7, column=1, padx=10, pady=10)
length_miles_label.grid(row=8, column=0, padx=10, pady=10)
length_miles_entry.grid(row=8, column=1, padx=10, pady=10)
elevation_gain_feet_label.grid(row=9, column=0, padx=10, pady=10)
elevation_gain_feet_entry.grid(row=9, column=1, padx=10, pady=10)
nps_difficulty_rating_label.grid(row=10, column=0, padx=10, pady=10)
nps_difficulty_rating.grid(row=10, column=1, padx=10, pady=10)
route_type_label.grid(row=11, column=0, padx=10, pady=10)
route_type_combo.grid(row=11, column=1, padx=10, pady=10)
submitbutton.grid(row=12, column=1, padx=10, pady=10)
root2.mainloop()
从tkinter导入*
从tkinter导入ttk
#国家名单
州=[“阿拉斯加”、“亚利桑那州”、“阿肯色州”]
#字典
州议会={
“州名称”:{
‘AK’:‘阿拉斯加’,
“AR”:“阿肯色州”,
'AZ':'Arizona'}
}
帕克斯迪克特={
“州名称”:{
“德纳”:“阿拉斯加”,
“GLBA”:“阿拉斯加”,
“KATM”:“阿拉斯加”,
“KEFJ”:“阿拉斯加”,
“HOSP”:“阿肯色州”,
“GRCA”:“亚利桑那州”,
“PEFO”:“亚利桑那州”,
“萨古”:“亚利桑那州”
},
“公园名称”:{
“德纳”:德纳里国家公园,
“GLBA”:“冰川湾国家公园”,
“KATM”:“Katmai国家公园”,
“KEFJ”:“基奈峡湾国家公园”,
“HOSP”:“温泉国家公园”,
“GRCA”:“大峡谷国家公园”,
"佩佛":"石化森林国家公园",,
‘萨古’:‘萨古罗国家公园’
}
root2=Tk()
根2.标题(“数据录入表”)
根2.几何形状(“800x500”)
state_name_label=label(root2,text=“state name”,width=20,font=“bold”,12),bd=1,relief=“raised”)
state_abbr_label=label(root2,text=“state abbr”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
公园名称标签=标签(root2,text=“公园名称”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
park_abbr_label=label(root2,text=“park abbr”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
最近的城市标签=标签(root2,text=“最近的城市”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
地理位置标签=标签(root2,text=“地理位置”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
hike\u name\u label=label(root2,text=“hike name”,width=20,font=(“bold”,12),bd=1,relief=“raised”)
长度(英里)标签=标签(root2,text=“长度(英里)”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
高程\增益\英尺\标签=标签(root2,text=“英尺高程”,宽度=20,font=(“粗体”,12),bd=1,relief=“凸起”)
nps难度等级标签=标签(root2,text=“nps难度等级”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
路线类型标签=标签(root2,text=“路线类型”,width=20,font=(“粗体”,12),bd=1,relief=“凸起”)
#数据输入字段
hike\u name\u entry=entry(root2,宽度=100)
最近的城市入口=入口(根2,宽度=50)
地理位置入口=入口(根2,宽度=50)
长度\英里\入口=入口(根2,宽度=50)
高程\增益\英尺\入口=入口(根2,宽度=50)
#提交按钮
submitbutton=按钮(root2,text='submitnewhike!',width=20,bg=“black”,fg='white')
#组合框
def parks_列表(e):
p=列表()
x=列表()
对于键,在PARKS_DICT['state_name']中的值。items():
if value==state_combo.get():
p、 附加(键)
对于公园中的k,v,DICT['park_name']。items():
如果k在p中:
x、 附加(五)
park_combo.config(值=x)
def park_abb(e):
p=列表()
对于键,park_DICT['park_name']中的值。items():
如果值==park\u combo.get():
p、 附加(键)
park_abbr_combo.config(value=p)
def状态_abb(e):
p=列表()
对于键,状态为[STATE\u name']的值。items():
if value==state_combo.get():
p、 附加(键)
state_abbr_combo.config(value=p)
state\u combo=ttk.Combobox(root2,value=states)
状态组合当前(0)
#state#combo.bind(“,state#abb)#-必须将此输出才能使另一个语句工作。
state\u combo.bind(“,parks\u list)
state_abbr_combo=ttk.Combobox(root2,value=[“”])
状态缩写组合。当前(0)
park_combo=ttk.Combobox(root2,值=[“”])
park_组合当前(0)
park_combo.bind(“,park_abb)
park_abbr_combo=ttk.Combobox(root2,value=[“”])
park_abbr_组合当前(0)
nps_难度_评级=ttk.组合框(根2,值=范围(1,6))
route_type_combo=ttk.Combobox(root2,value=['loop','out and back','point to point'])
#网格布局
state_name_label.grid(行=1,列=0,padx=10,pady=10)
state_combo.grid(行=1,列=1,padx=10,pady=10)
state_abbr_label.grid(行=2,列=0,padx=10,pady=10)
state_abbr_combo.grid(行=2,列=1,padx=10,pady=10)
park_name_label.grid(行=3,列=0,padx=10,pady=10)
park_组合网格(行=3,列=1,padx=10,pady=10)
park_abbr_label.grid(行=4,列=0,padx=10,pady=10)
park_abbr_combo.grid(行=4,列=1,padx=10,pady=10)
最近的城市标签网格(行=5,列=0,padx=10,pady=10)
最近的城市入口网格(行=5,列=1,padx=10,pady=10)
地理位置标签网格(行=6,列=0,padx=10,pady=10)
地理位置输入网格(行=6,列=1,padx=10,pady=10)
网格(行=7,列=0,padx=10,pady=10)
网格(行=7,列=1,padx=10,pady=10)
长度\英里\标签网格(行=8,列=0,padx=10,pady=10)
长度\英里\条目网格(行=8,列=1,padx=10,pady=10)
高程\增益\英尺\标签网格(行=9,列=0,padx=10,pady=10)
高程\增益\英尺\入口网格(行=9,列=1,padx=10,pady=10)
nps难度等级标签网格(行=10,列=0,padx=10,pady=10)
nps难度等级网格(行=10,列=1,padx=10,pady=10)
管线类型标签网格(行=11,列=0,padx=10,pady=10)
路由\类型\组合。
def state_combo_changed(event):
    state_abb(event)
    parks_list(abb)

state_combo.bind("<<ComboboxSelected>>", state_combo_changed) 
state_combo.bind("<<ComboboxSelected>>", state_abb)
state_combo.bind("<<ComboboxSelected>>", parks_list, add=True)