利用ttk combobox控件制作省、市二级联动菜单
数据使用已有行政区划代码EXCEL文件。该文件已上传至我的资源中。

补充:设置全局变更,方便函数传递。

import tkinter
from tkinter import ttk
import openpyxl
from openpyxl import Workbook
win = tkinter.Tk()
win.title("Kahn Software v1")  # #窗口标题
win.geometry("500x300+200+20")  # #窗口位置500后面是字母x
shengjidaima=''
shijidaima=''
a_dict= {}
a_list=[]
b_dict= {}
b_list=[]


filepath = '行政代码区划.xlsx'  # 打开已有excel数据文件
wb = openpyxl.load_workbook(filepath)
ws = wb['Sheet1']
# 表总行数
max_row = ws.max_row
# 表总列数
max_col = ws.max_column
ws2 = wb['Sheet2']
# 表总行数
max_row2 = ws2.max_row
# 表总列数
max_col2 = ws2.max_column

for x in range(1, max_row):
    cell_data = ws.cell(row=x, column=1).value #读取省级名称
    cell_id=ws.cell(row=x, column=2).value #读取省级代码
    a_dict.update({cell_data:cell_id}) #省级名称与代码保存入a_dict字典文件中
    a_list.append(cell_data) #省级名称保存入a_list列表文件中

'''
下拉菜单
'''
xVariable = tkinter.StringVar()  # #创建变量,便于取值

com = ttk.Combobox(win, textvariable=xVariable)  # #创建下拉菜单
com.pack()  # #将下拉菜单绑定到窗体
com["value"] = (a_list)  # #给下拉菜单设定值
#com.current(2)  # #设定下拉菜单的默认值为第3个,即山东

dier = tkinter.StringVar()  # #创建变量,便于取值
com2 = ttk.Combobox(win, textvariable=dier)  # #创建下拉菜单
com2.pack()  # #将下拉菜单绑定到窗体



def xFunc(event):
    #print(com.get())  # #获取选中的值方法1
    #print(xVariable.get())  # #获取选中的值方法2
    a_dict_str=a_dict[xVariable.get()]
    a_dict_str=str(a_dict_str)[0:2]
    print(a_dict_str)
    com2.delete(0,tkinter.END)  #本意想清空COM列表中所有数据,但不能实现不知道为什么?????
    for xx in range(1, max_row2):        #读取表2地级市代码表格内容
        cell_data2 = ws2.cell(row=xx, column=1).value
        cell_id2 = ws2.cell(row=xx, column=3).value
        cell_id2_str=str(cell_id2)[0:2]  #进行字符串截取得到在COM列表框中选择省级,与地市级进行关联
        if cell_id2_str == a_dict_str:
            b_dict.update({cell_data2: cell_id2})
            b_list.append(cell_data2)

    com2["value"] = (b_list)
    com2.current(1) #设置默认显示数据为第二条


def dierFunc(event):
    print(com.get())
    print(a_dict[com.get()])
    print(com2.get())
    print(b_dict[com2.get()])
    global shengjidaima,shijidaima
    shijidaima=b_dict[com2.get()]
    shengjidaima=a_dict[com.get()]
def treesave():
    print(shengjidaima,shijidaima)
com.bind("<<ComboboxSelected>>", xFunc)  # #给下拉菜单绑定事件
com2.bind("<<ComboboxSelected>>", dierFunc)
button2 = ttk.Button(win, text="获取选择代码。。。", command=treesave)  # 创建按钮控件
button2.pack()
win.mainloop()  # #窗口持久化
import tkinter
from tkinter import ttk
import openpyxl
from openpyxl import Workbook
win = tkinter.Tk()
win.title("Kahn Software v1")  # #窗口标题
win.geometry("500x300+200+20")  # #窗口位置500后面是字母x

a_dict= {}
a_list=[]
b_dict= {}
b_list=[]


filepath = '行政代码区划.xlsx'  # 打开已有excel数据文件
wb = openpyxl.load_workbook(filepath)
ws = wb['Sheet1']
# 表总行数
max_row = ws.max_row
# 表总列数
max_col = ws.max_column
ws2 = wb['Sheet2']
# 表总行数
max_row2 = ws2.max_row
# 表总列数
max_col2 = ws2.max_column

for x in range(1, max_row):
    cell_data = ws.cell(row=x, column=1).value #读取省级名称
    cell_id=ws.cell(row=x, column=2).value #读取省级代码
    a_dict.update({cell_data:cell_id}) #省级名称与代码保存入a_dict字典文件中
    a_list.append(cell_data) #省级名称保存入a_list列表文件中

'''
下拉菜单
'''
xVariable = tkinter.StringVar()  # #创建变量,便于取值

com = ttk.Combobox(win, textvariable=xVariable)  # #创建下拉菜单
com.pack()  # #将下拉菜单绑定到窗体
com["value"] = (a_list)  # #给下拉菜单设定值
#com.current(2)  # #设定下拉菜单的默认值为第3个,即山东

dier = tkinter.StringVar()  # #创建变量,便于取值
com2 = ttk.Combobox(win, textvariable=dier)  # #创建下拉菜单
com2.pack()  # #将下拉菜单绑定到窗体



def xFunc(event):
    #print(com.get())  # #获取选中的值方法1
    #print(xVariable.get())  # #获取选中的值方法2
    a_dict_str=a_dict[xVariable.get()]
    a_dict_str=str(a_dict_str)[0:2]
    print(a_dict_str)
    com2.delete(0,tkinter.END)  #本意想清空COM列表中所有数据,但不能实现不知道为什么?????
    for xx in range(1, max_row2):        #读取表2地级市代码表格内容
        cell_data2 = ws2.cell(row=xx, column=1).value
        cell_id2 = ws2.cell(row=xx, column=3).value
        cell_id2_str=str(cell_id2)[0:2]  #进行字符串截取得到在COM列表框中选择省级,与地市级进行关联
        if cell_id2_str == a_dict_str:
            b_dict.update({cell_data2: cell_id2})
            b_list.append(cell_data2)

    com2["value"] = (b_list)
    com2.current(1) #设置默认显示数据为第二条


def dierFunc(event):
    print(com.get())
    print(a_dict[com.get()])
    print(com2.get())
    print(b_dict[com2.get()])

com.bind("<<ComboboxSelected>>", xFunc)  # #给下拉菜单绑定事件
com2.bind("<<ComboboxSelected>>", dierFunc)

win.mainloop()  # #窗口持久化