Tkinter技术问题:如何让程序重启时窗口在关闭位置打开?
让Tkinter窗口重启后保持关闭时的位置
这问题我之前做桌面小工具的时候也碰到过,核心思路就是把窗口的位置和尺寸信息持久化存储起来,程序启动时再读取这些信息恢复窗口状态就行。下面给你一个完整的可运行方案:
实现步骤
- 程序启动时读取本地配置文件,加载上次保存的窗口位置
- 窗口关闭/重启前,将当前窗口的位置信息写入配置文件
- 重启程序时,新进程读取配置文件恢复窗口状态
完整代码示例
import tkinter as tk import json import os import sys def load_window_config(): # 配置文件路径,放在程序运行目录下 config_path = os.path.join(os.path.dirname(__file__), "window_config.json") if os.path.exists(config_path): with open(config_path, "r", encoding="utf-8") as f: config_data = json.load(f) # 返回保存的geometry,默认800x600 return config_data.get("geometry", "800x600") # 没有配置文件时返回默认尺寸 return "800x600" def save_window_config(geometry): config_path = os.path.join(os.path.dirname(__file__), "window_config.json") with open(config_path, "w", encoding="utf-8") as f: json.dump({"geometry": geometry}, f) def restart_app(): # 重启前先保存当前窗口位置 save_window_config(root.geometry()) # 执行重启命令 python_exec = sys.executable os.execl(python_exec, python_exec, *sys.argv) def on_closing(): # 关闭窗口前保存位置 save_window_config(root.geometry()) root.destroy() # 主程序初始化 root = tk.Tk() root.title("记住窗口位置Demo") # 加载配置并设置窗口位置 initial_geometry = load_window_config() root.geometry(initial_geometry) # 绑定窗口关闭事件 root.protocol("WM_DELETE_WINDOW", on_closing) # 添加重启按钮(模拟你的重启场景) restart_btn = tk.Button(root, text="重启程序", command=restart_app, padx=10, pady=5) restart_btn.pack(pady=30) root.mainloop()
代码说明
load_window_config:启动时检查配置文件是否存在,存在则读取上次保存的窗口geometry(格式为宽度x高度+X偏移+Y偏移,比如800x600+150+100),不存在则使用默认尺寸。save_window_config:将当前窗口的位置信息写入JSON格式的配置文件,确保信息能持久化到本地。- 窗口关闭事件绑定:通过
root.protocol("WM_DELETE_WINDOW", on_closing),在用户点击窗口关闭按钮时自动保存位置,避免正常关闭时丢失信息。 - 重启逻辑:在执行
os.execl重启前,先调用保存函数记录当前窗口位置,新启动的程序会读取配置文件恢复状态。
这样不管是正常关闭后重新打开,还是通过os.execl重启,窗口都会回到上次关闭时的位置和尺寸啦。
内容的提问来源于stack exchange,提问作者Kalib Kumeroa
相关产品推荐
相关产品推荐

