import tkinter as tk from tkinter import ttk, filedialog, messagebox, simpledialog import json import os from lighter import process_images class NamingConfigApp: def __init__(self, root): self.root = root self.root.title("图片命名配置工具") # 配置数据存储 self.config_data = {} self.current_frame = None # 创建界面 self.create_widgets() self.load_config() # 自动尝试加载已有配置 def create_widgets(self): # 顶部按钮区域 top_frame = ttk.Frame(self.root, padding=10) top_frame.pack(fill=tk.X) # 配置显示区域 self.canvas = tk.Canvas(self.root) self.scrollbar = ttk.Scrollbar(self.root, orient="vertical", command=self.canvas.yview) self.scrollable_frame = ttk.Frame(self.canvas) ttk.Label(self.scrollable_frame, text="配置项:").pack(side=tk.TOP, pady=10) self.scrollable_frame.bind( "", lambda e: self.canvas.configure( scrollregion=self.canvas.bbox("all") ) ) self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw") self.canvas.configure(yscrollcommand=self.scrollbar.set) self.canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) # 右部操作区域 right_frame = ttk.Frame(self.root, padding=10) right_frame.pack(fill=tk.X) ttk.Button(right_frame, text="新建配置", command=self.create_new_config).pack(side=tk.BOTTOM, padx=5) ttk.Button(right_frame, text="加载配置", command=self.load_config_dialog).pack(side=tk.BOTTOM, padx=5) ttk.Button(right_frame, text="保存配置", command=self.save_config).pack(side=tk.BOTTOM, padx=5) ttk.Button(right_frame, text="处理图片", command=self.process_images).pack(side=tk.TOP, padx=5) # 底部提示区域 bottom_frame = ttk.Frame(self.root, padding=10) bottom_frame.pack(fill=tk.Y) ttk.Label(bottom_frame, text= "注意:请在左侧配置区域进行配置。项目名称请大写缩写。\n" "点击“处理图片”按钮进行图片处理。无新需求不用新建配置。\n" "处理图片时请选择后面带#号的风机组和叶片号顶层文件夹。\n" ).pack(side=tk.BOTTOM, padx=5)#"新建配置后修改utils.get_name()函数中的规则即可" def create_config_fields(self): # 清空现有配置显示 if self.current_frame: self.current_frame.destroy() self.current_frame = ttk.Frame(self.scrollable_frame) self.current_frame.pack(fill=tk.BOTH, expand=True) # 动态生成配置项 for i, (title, value) in enumerate(self.config_data.items()): row_frame = ttk.Frame(self.current_frame) row_frame.grid(row=i, column=0, sticky="ew", padx=5, pady=2) ttk.Label(row_frame, text=title, width=20).pack(side=tk.LEFT) entry = ttk.Entry(row_frame) entry.insert(0, value) entry.pack(side=tk.RIGHT, fill=tk.X, expand=True) # 保存引用以便后续获取值 self.config_data[title] = entry def create_new_config(self): # 创建新配置项对话框 title = simpledialog.askstring("新建配置项", "请输入配置项名称:") if title: if title in self.config_data: messagebox.showerror("错误", "配置项已存在!") return self.config_data[title] = "" # 初始化空值 self.create_config_fields() def load_config_dialog(self): # 加载配置对话框 file_path = filedialog.askopenfilename( initialdir=os.getcwd(), title="选择配置文件", filetypes=(("JSON文件", "*.json"),) ) if file_path: self.load_config(file_path) def load_config(self, file_path="naming_config.json"):#naming_config.json # 加载配置逻辑 try: with open(file_path, "r") as f: data = json.load(f) self.config_data = {k: v for k, v in data.items()} self.create_config_fields() except FileNotFoundError: messagebox.showinfo("信息", "未找到配置文件,请新建配置") except Exception as e: messagebox.showerror("错误", f"配置文件加载失败:{str(e)}") def save_config(self): # 保存配置逻辑 try: # 获取所有输入框的值 final_config = {title: entry.get() for title, entry in self.config_data.items()} with open("naming_config.json", "w") as f: json.dump(final_config, f, indent=2) messagebox.showinfo("成功", "配置保存成功!") except Exception as e: messagebox.showerror("错误", f"保存失败:{str(e)}") def process_images(self): # 处理图片逻辑 path = filedialog.askdirectory(title="选择图片文件夹") if not path: return config = {title: entry.get() for title, entry in self.config_data.items()} # 这里调用实际的处理函数 self.actual_image_processor(path, config) messagebox.showinfo("完成", f"已处理图片目录:{path}") def actual_image_processor(self, path, config): """实际图片处理函数(需要根据需求实现)""" print(f"处理路径:{path}") print(f"当前配置:{config}") input_dir=path output_dir = input_dir+"+调整" # if not os.path.exists(output_dir): # os.makedirs(output_dir,exist_ok=True) # gamma = float(input("请输入筛选阴影区阈值(0~255),建议120~200,优先160,若阴影亮度调高效果不明显可以调大值: ")) # threshold = float(input("请输入筛选爆光区阈值(0~255),建议240~254,优先245,若曝光区亮度降低不明显或区域较大可以调小: ")) gamma = 180 threshold = 253 no_auto_bright = False process_images(input_dir, output_dir, gamma, threshold, no_auto_bright,config) print("处理完成,输出路径:", output_dir) # 在这里添加实际的图片处理逻辑 if __name__ == "__main__": root = tk.Tk() app = NamingConfigApp(root) root.mainloop()