如何在不使用pickle库的情况下保存CustomTkinter GUI输入状态
CustomTkinter输入框状态保存与加载实现方案
核心思路
用JSON文件存储输入框的内容列表(因为不能用pickle,JSON是轻量的文本格式,适合存这类结构化数据),启动时读取文件恢复输入框数量和内容。
关键修改点
- 修复输入框收集逻辑:原代码里最后一个输入框不在
entry_list里,保存时要把entry_list和当前的entry_1都纳入收集范围 - 实现保存功能:把所有输入框的值存入JSON文件
- 实现加载功能:启动时读取JSON文件,自动创建对应数量的输入框并填充内容
完整代码
import customtkinter import json import os class MyGui: def __init__(self, app): self.app = app self.entry_list = [] self.save_file = "entries.json" # 定义保存的文件名 # 尝试加载之前保存的内容 self.load_entries() # 添加按钮 self.add_entry_button = customtkinter.CTkButton(master=self.app, text="Add entry", command=self.add_entry) self.add_entry_button.pack(pady=10, padx=10) self.save_button = customtkinter.CTkButton(master=self.app, text="Save for next session", command=self.save_instance) self.save_button.pack(pady=10, padx=10) def add_entry(self): # 把当前的输入框加入列表(如果是第一次添加,初始的输入框会被加入) if hasattr(self, 'entry_1'): self.entry_list.append(self.entry_1) # 创建新的输入框 self.entry_1 = customtkinter.CTkEntry(master=self.app, placeholder_text="entry") self.entry_1.pack(pady=10, padx=10) def save_instance(self): # 收集所有输入框的值:列表里的 + 当前最后一个 entry_values = [entry.get() for entry in self.entry_list] if hasattr(self, 'entry_1'): entry_values.append(self.entry_1.get()) # 写入JSON文件 with open(self.save_file, 'w', encoding='utf-8') as f: json.dump(entry_values, f, ensure_ascii=False) def load_entries(self): # 如果保存文件存在,加载内容 if os.path.exists(self.save_file): with open(self.save_file, 'r', encoding='utf-8') as f: entry_values = json.load(f) # 创建对应数量的输入框 for idx, value in enumerate(entry_values): entry = customtkinter.CTkEntry(master=self.app, placeholder_text="entry") entry.insert(0, value) entry.pack(pady=10, padx=10) # 除了最后一个,其他都加入entry_list if idx != len(entry_values) - 1: self.entry_list.append(entry) # 把最后一个输入框赋值给entry_1,方便后续添加新框 if entry_values: self.entry_1 = entry else: # 没有保存文件时,创建初始输入框 self.entry_1 = customtkinter.CTkEntry(master=self.app, placeholder_text="entry") self.entry_1.pack(pady=10, padx=10) app = customtkinter.CTk() running = MyGui(app) app.mainloop()
说明
- 保存时:会把所有输入框的内容整理成列表,写入
entries.json文件 - 加载时:启动程序会自动读取
entries.json,根据里面的内容创建对应数量的输入框并填充之前保存的值 - 输入框数量范围:完全支持5-305个的需求,JSON对列表长度没有限制
- 依赖:只用到Python标准库的
json和os,不需要额外安装包
内容的提问来源于stack exchange,提问作者Ravdar
相关产品推荐
相关产品推荐

