利用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() # #窗口持久化