You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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()

使用说明

  1. 把你自己的JSON数据保存为dataset.json文件,和上述代码放在同一个文件夹下
  2. 运行代码后,可以单独输入数据集ID、名称、来源中的任意一个或多个条件,点击提交即可返回匹配的完整数据集信息
  3. 支持模糊匹配名称和来源,ID需要输入完整的数字

内容的提问来源于stack exchange,提问作者Ren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:48:03