Tkinter实现两个Combobox通过字典联动按性别筛选姓名
Tkinter 双Combobox无按钮联动实现
实现原理
直接利用ttk.Combobox内置的<<ComboboxSelected>>虚拟事件,给性别选择框绑定选中回调,每次用户切换性别选项时自动筛选对应人员名单,更新姓名下拉框的选项列表即可,全程不需要额外触发按钮。
修正后完整可运行代码
from tkinter import ttk import tkinter as tk window = tk.Tk() window.attributes('-zoomed', True) window.configure(bg='#f3f2f2') style = ttk.Style(window) style.theme_use('clam') # 人员数据统一存入列表,方便遍历筛选 John = {"Name": "John", "Years": 1980, "Gender": "Male"} Linda = {"Name": "Linda", "Years": 1983, "Gender": "Female"} Martin = {"Name": "Martin", "Years": 1981, "Gender": "Male"} people_list = [John, Linda, Martin] # 性别选择下拉框 gender=ttk.Combobox(window, width = 12) gender.place(x=5, y=60) gender['value'] = ["Male", "Female"] gender.set("Gender?") # 姓名选择下拉框 all_name=ttk.Combobox(window, width = 12) all_name.place(x=150, y=60) all_name.set("All Name") # 定义联动更新逻辑 def update_names(event): current_gender = gender.get() # 按选中性别筛选匹配的姓名 match_names = [person["Name"] for person in people_list if person["Gender"] == current_gender] # 更新姓名下拉框的可选选项 all_name["value"] = match_names # 清空原有显示值,避免残留上一次性别对应的不匹配选项 all_name.set("") # 给性别下拉框绑定选中事件,选中即自动触发更新 gender.bind("<<ComboboxSelected>>", update_names) window.mainloop()
实际效果
- 选中
Male选项时,姓名下拉框自动加载John、Martin两个男性姓名 - 选中
Female选项时,姓名下拉框自动加载Linda女性姓名 - 切换性别过程无卡顿,不需要点击任何额外按钮触发
内容的提问来源于stack exchange,提问作者user18313765
相关产品推荐
相关产品推荐

