Tkinter便签应用:保存并恢复Text组件的字体与背景色
Tkinter便签保存/恢复组件样式实现方案
核心思路
- 用JSON文件存储组件的字体、背景色配置
- 窗口关闭时捕获事件,保存当前样式到文件
- 应用启动时读取配置文件,加载样式到组件
具体实现步骤
1. 导入必要模块
import tkinter as tk import json import os
2. 指定配置文件路径
选择和脚本同目录的JSON文件存储配置:
CONFIG_FILE = "sticky_config.json"
3. 编写保存配置的函数
窗口关闭时调用该函数,提取组件样式并写入文件:
def save_config(input_widget): # 获取字体信息:解析Tkinter返回的字体元组 font = input_widget.cget("font") font_name = font[0] font_size = font[1] font_style = font[2] if len(font) > 2 else "" # 获取背景色 bg_color = input_widget.cget("bg") # 构造配置字典并写入文件 config = { "font": { "name": font_name, "size": font_size, "style": font_style }, "bg_color": bg_color } with open(CONFIG_FILE, "w") as f: json.dump(config, f, indent=4)
4. 编写加载配置的函数
应用启动时读取配置,将样式应用到组件:
def load_config(input_widget): if not os.path.exists(CONFIG_FILE): return # 无配置文件则使用默认样式 with open(CONFIG_FILE, "r") as f: config = json.load(f) # 组装字体参数并设置组件样式 font_config = config["font"] font = (font_config["name"], font_config["size"], font_config["style"]) input_widget.config(font=font, bg=config["bg_color"])
5. 整合到便签窗口类
修改你的StickyNoteWindow类,绑定加载和保存逻辑:
class StickyNoteWindow(tk.Tk): def __init__(self): super().__init__() self.title("便签") # 创建文本输入组件(沿用你原有的组件定义) self.inputtxt = tk.Text(self, wrap=tk.WORD) self.inputtxt.pack(fill=tk.BOTH, expand=True) # 启动时加载保存的样式 load_config(self.inputtxt) # 绑定窗口关闭事件:先保存配置再关闭 self.protocol("WM_DELETE_WINDOW", self.on_close) def on_close(self): save_config(self.inputtxt) self.destroy() # 启动应用 if __name__ == "__main__": app = StickyNoteWindow() app.mainloop()
注意事项
- 若你的输入组件是
Entry而非Text,代码完全通用,cget是Tkinter组件的通用方法 - 字体样式为空时,Tkinter会自动使用默认样式
- 确保脚本拥有当前目录的读写权限,否则配置文件无法正常保存/读取
内容的提问来源于stack exchange,提问作者Shraddha Shetty
相关产品推荐
相关产品推荐

