使用Python实现JSON文件与GUI界面对接的技术咨询
Tkinter GUI 绑定JSON查询功能实现方案
你现有代码的核心问题是三个输入框共用了同一个变量名,后续无法分别获取不同输入框的内容,同时缺少提交按钮的点击事件逻辑。以下是可直接运行的完整实现:
完整代码
from tkinter import * import json # 提前加载JSON数据(你可以把JSON文件命名为dataset.json和代码放同一目录) def load_json_data(): try: with open('dataset.json', 'r', encoding='utf-8') as f: raw_data = json.load(f) # 把原始JSON整理为方便查询的条目列表 all_datasets = [] indices = raw_data['datasetid'].keys() for idx in indices: item = { "数据集ID": raw_data['datasetid'][idx], "数据集名称": raw_data['name'][idx], "数据来源": raw_data['source'][idx], "发布日期": raw_data['release_date'][idx], "下次更新时间": raw_data['next_release_due'][idx], "地理最高层级": raw_data['geo_ceil'][idx], "地理最低层级": raw_data['geo_floor'][idx], "支持按年查询": raw_data['year'][idx], "支持按季度查询": raw_data['quarter'][idx], "支持按月查询": raw_data['month'][idx], "支持按日查询": raw_data['day'][idx], "支持按周查询": raw_data['week'][idx], } all_datasets.append(item) return all_datasets except Exception as e: return f"JSON文件加载失败:{str(e)}" # 提交按钮点击事件 def on_submit(): # 获取三个输入框的内容,去除首尾空格 input_name = name_entry.get().strip() input_id = id_entry.get().strip() input_source = source_entry.get().strip() # 加载数据 datasets = load_json_data() if isinstance(datasets, str): result_label.config(text=datasets) return # 匹配结果 match_result = [] for item in datasets: # 只要有一个非空条件匹配就算命中,三个都空就返回所有数据 is_match = True if input_id: try: if item["数据集ID"] != int(input_id): is_match = False except: is_match = False if input_name and input_name not in item["数据集名称"]: is_match = False if input_source and input_source not in item["数据来源"]: is_match = False if is_match: # 格式化匹配到的条目 item_str = "\n".join([f"{k}: {v}" for k,v in item.items()]) match_result.append(item_str) # 显示结果 if not match_result: result_label.config(text="未找到匹配的数据集") else: result_label.config(text="\n---------------------\n".join(match_result)) # 初始化界面 window = Tk() window.title("数据库查询界面") window.geometry("500x400+40+20") # 输入框和标签 # 数据集名称 Label(window, text="DatasetName", fg='red', font=("Helvetica", 8)).place(x=10, y=20) name_entry = Entry(window, bd=5) name_entry.place(x=80, y=20) # 数据集ID Label(window, text="DatasetID", fg='red', font=("Helvetica", 8)).place(x=23, y=50) id_entry = Entry(window, bd=5) id_entry.place(x=80, y=50) # 来源 Label(window, text="Source", fg='red', font=("Helvetica", 8)).place(x=23, y=80) source_entry = Entry(window, bd=5) source_entry.place(x=80, y=80) # 提交按钮 btn = Button(window, text="Submit", fg='blue', command=on_submit) btn.place(x=120, y=120) # 结果显示区域 result_label = Label(window, text="请输入查询条件后点击提交", justify=LEFT, wraplength=450) result_label.place(x=20, y=160) window.mainloop()
使用说明
- 把你自己的JSON数据保存为
dataset.json文件,和上述代码放在同一个文件夹下 - 运行代码后,可以单独输入数据集ID、名称、来源中的任意一个或多个条件,点击提交即可返回匹配的完整数据集信息
- 支持模糊匹配名称和来源,ID需要输入完整的数字
内容的提问来源于stack exchange,提问作者Ren
相关产品推荐
相关产品推荐

