You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:22:04