Tkinter点击按钮启动project.py后旧窗口未关闭问题求助
Tkinter启动外部脚本后无法关闭原窗口的解决方法
你的问题出在os.system()的阻塞特性上:这个函数会卡住当前的Tkinter进程,直到你启动的project.py完全运行结束,才会执行后面的root.withdraw()。这就是为什么原窗口一直关不掉——代码根本没走到关闭那一步,除非你把project.py关掉。
解决方法是用subprocess.Popen替代os.system,它是非阻塞的,启动外部脚本后会立刻继续执行后续代码:
修改后的完整代码:
import tkinter as tk import subprocess def start_game(): # 用Popen启动外部脚本,非阻塞模式 subprocess.Popen(["python", "project.py"]) # 直接销毁原窗口,比withdraw更彻底 root.destroy() root = tk.Tk() root.title("Welcome to Engg Catcher!") start_button = tk.Button(root, text="Start Game", command=start_game) start_button.pack(pady=20) root.mainloop()
关键说明:
subprocess.Popen不会等待外部脚本结束,启动后立刻返回,所以能马上执行窗口销毁代码- 用
root.destroy()替代root.withdraw():withdraw()只是隐藏窗口,Tkinter进程还在后台运行;destroy()会彻底关闭窗口并终止主循环,符合你"关闭旧窗口"的需求 - 如果你的系统里Python命令是
python3,把["python", "project.py"]改成["python3", "project.py"]
内容的提问来源于stack exchange,提问作者sya
相关产品推荐
相关产品推荐

