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

如何为树莓派模拟超声系统开发非技术人员可操作的字典配置工具

RFID-GIF关联关系可视化管理方案

解决思路

把原脚本中硬编码的pre-intervention和post-intervention字典,迁移到JSON配置文件中,再用树莓派自带的Tkinter库做一个可视化表单工具,让同事不用碰代码就能完成关联关系的增删改查,操作后直接保存到配置文件,原设备脚本自动加载最新配置。

具体实现步骤

1. 迁移硬编码字典到JSON配置文件

先把你现有脚本里的两个字典内容导出到rfid_gif_mapping.json文件,格式如下:

{
  "pre-intervention": {
    "RFID_TAG_001": "pre_scan_01.gif",
    "RFID_TAG_002": "pre_scan_02.gif"
  },
  "post-intervention": {
    "RFID_TAG_001": "post_scan_01.gif",
    "RFID_TAG_003": "post_scan_03.gif"
  }
}

然后修改原设备脚本,替换硬编码的字典,改成从JSON文件加载配置:

import json

# 加载RFID-GIF关联配置
def load_rfid_mappings():
    try:
        with open('rfid_gif_mapping.json', 'r') as f:
            return json.load(f)
    except FileNotFoundError:
        # 配置文件不存在时返回空结构
        return {"pre-intervention": {}, "post-intervention": {}}

# 初始化关联映射
rfid_mappings = load_rfid_mappings()

# 后续脚本中直接使用rfid_mappings即可,比如扫描到标签后:
# current_scene = "pre-intervention" # 或者通过按钮切换的当前场景
# gif_path = rfid_mappings[current_scene].get(scanned_tag, "default.gif")

2. 编写Tkinter可视化管理工具

这个工具不需要额外安装依赖(树莓派默认带Tkinter),直接运行就能用,包含场景切换、列表展示、增删改查、保存功能:

import tkinter as tk
from tkinter import ttk, messagebox
import json

class RFIDGIFManager:
    def __init__(self, root):
        self.root = root
        self.root.title("RFID-GIF关联管理")
        self.mappings = self._load_config()
        
        # 场景切换选项卡
        self.notebook = ttk.Notebook(root)
        self.notebook.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
        
        # 预干预场景页面
        self.pre_frame = ttk.Frame(self.notebook)
        self.notebook.add(self.pre_frame, text="pre-intervention")
        self._setup_frame(self.pre_frame, "pre-intervention")
        
        # 后干预场景页面
        self.post_frame = ttk.Frame(self.notebook)
        self.notebook.add(self.post_frame, text="post-intervention")
        self._setup_frame(self.post_frame, "post-intervention")
    
    def _load_config(self):
        try:
            with open('rfid_gif_mapping.json', 'r') as f:
                return json.load(f)
        except FileNotFoundError:
            return {"pre-intervention": {}, "post-intervention": {}}
    
    def _save_config(self):
        with open('rfid_gif_mapping.json', 'w') as f:
            json.dump(self.mappings, f, indent=2)
        messagebox.showinfo("操作成功", "关联关系已保存!")
    
    def _setup_frame(self, frame, scene):
        # 关联列表展示
        self.tree = ttk.Treeview(frame, columns=("RFID标签", "GIF路径"), show="headings")
        self.tree.heading("RFID标签", text="RFID标签")
        self.tree.heading("GIF路径", text="GIF路径")
        self.tree.column("RFID标签", width=150)
        self.tree.column("GIF路径", width=250)
        self.tree.pack(padx=5, pady=5, fill=tk.BOTH, expand=True)
        
        self._refresh_list(scene)
        
        # 输入区域
        input_frame = ttk.Frame(frame)
        input_frame.pack(padx=5, pady=5, fill=tk.X)
        
        ttk.Label(input_frame, text="RFID标签:").grid(row=0, column=0, padx=5, pady=2, sticky=tk.W)
        self.rfid_entry = ttk.Entry(input_frame)
        self.rfid_entry.grid(row=0, column=1, padx=5, pady=2, sticky=tk.EW)
        
        ttk.Label(input_frame, text="GIF路径:").grid(row=1, column=0, padx=5, pady=2, sticky=tk.W)
        self.gif_entry = ttk.Entry(input_frame)
        self.gif_entry.grid(row=1, column=1, padx=5, pady=2, sticky=tk.EW)
        
        input_frame.columnconfigure(1, weight=1)
        
        # 操作按钮
        btn_frame = ttk.Frame(frame)
        btn_frame.pack(padx=5, pady=5, fill=tk.X)
        
        ttk.Button(btn_frame, text="添加关联", command=lambda: self._add_entry(scene)).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="编辑选中", command=lambda: self._edit_entry(scene)).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="删除选中", command=lambda: self._delete_entry(scene)).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="保存修改", command=self._save_config).pack(side=tk.RIGHT, padx=5)
    
    def _refresh_list(self, scene):
        # 清空列表
        for item in self.tree.get_children():
            self.tree.delete(item)
        # 加载当前场景的关联数据
        for rfid, gif_path in self.mappings[scene].items():
            self.tree.insert("", tk.END, values=(rfid, gif_path))
    
    def _add_entry(self, scene):
        rfid = self.rfid_entry.get().strip()
        gif_path = self.gif_entry.get().strip()
        if not rfid or not gif_path:
            messagebox.showwarning("提示", "请填写完整的RFID标签和GIF路径")
            return
        self.mappings[scene][rfid] = gif_path
        self._refresh_list(scene)
        # 清空输入框
        self.rfid_entry.delete(0, tk.END)
        self.gif_entry.delete(0, tk.END)
    
    def _edit_entry(self, scene):
        selected_item = self.tree.selection()
        if not selected_item:
            messagebox.showwarning("提示", "请先选中要编辑的条目")
            return
        item_data = self.tree.item(selected_item[0])
        old_rfid = item_data["values"][0]
        new_rfid = self.rfid_entry.get().strip()
        new_gif = self.gif_entry.get().strip()
        if not new_rfid or not new_gif:
            messagebox.showwarning("提示", "请填写完整的修改内容")
            return
        # 更新关联数据
        del self.mappings[scene][old_rfid]
        self.mappings[scene][new_rfid] = new_gif
        self._refresh_list(scene)
        self.rfid_entry.delete(0, tk.END)
        self.gif_entry.delete(0, tk.END)
    
    def _delete_entry(self, scene):
        selected_item = self.tree.selection()
        if not selected_item:
            messagebox.showwarning("提示", "请先选中要删除的条目")
            return
        item_data = self.tree.item(selected_item[0])
        rfid = item_data["values"][0]
        if messagebox.askyesno("确认删除", f"确定要删除RFID标签「{rfid}」的关联吗?"):
            del self.mappings[scene][rfid]
            self._refresh_list(scene)

if __name__ == "__main__":
    root = tk.Tk()
    app = RFIDGIFManager(root)
    root.geometry("500x400")
    root.mainloop()

3. 同事的操作流程

  1. 双击运行这个管理工具的.py文件(树莓派上直接点击即可)
  2. 点击顶部选项卡切换pre-intervention或post-intervention场景
  3. 添加关联:在输入框填写RFID标签字符串和对应的GIF文件名(确保GIF和脚本在同一文件夹),点击「添加关联」
  4. 编辑关联:选中列表里的条目,在输入框修改内容后点击「编辑选中」
  5. 删除关联:选中条目,点击「删除选中」并确认
  6. 所有修改完成后点击「保存修改」,原超声设备脚本下次运行会自动加载最新配置

方案优势

  • 完全无需编程知识,可视化操作门槛极低
  • 配置文件用JSON格式存储,即使管理工具出问题,也能直接用文本编辑器打开修改(格式简单易读)
  • 基于树莓派自带的Tkinter,不需要额外安装任何依赖包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:20:37