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

为何Tkinter代码运行后会自动打开两个窗口?

问题解答

先给你明确结论:Tk()实例在创建的瞬间就会自动显示窗口,根本不是等调用mainloop()才可视化。

原因其实很简单:

  • 在Tkinter里,Tk()是创建主窗口的构造函数,只要你执行x2 = Tk()这行代码,Tkinter就会立刻初始化这个窗口,并直接把它渲染到屏幕上,这是它的默认行为。
  • 至于mainloop(),它的作用是启动事件循环——简单说就是盯着窗口,处理用户的各种操作(比如点按钮、拖窗口、关窗口这些),让窗口能正常响应用户,维持存活状态。要是没调用mainloop(),窗口可能会闪一下就没了或者没法操作,但窗口本身在创建时已经显示出来了。

回到你的代码来看:

  • 你一开始就写了x1 = Tk()和x2 = Tk(),这两行执行完,两个窗口就都被创建并显示了,后面的x1.mainloop()只是让x1能响应操作,x2虽然没跑自己的mainloop,但已经在屏幕上了(只是点不动而已)。
  • 把x2 = Tk()放到xd()函数里,就只有点击按钮时才会创建x2,所以一开始只有x1窗口,这就符合你想要的效果了。

另外提个小建议:Tkinter一般推荐一个应用只创建一个Tk()实例,要是需要多窗口,用Toplevel()创建子窗口更合适,这样能共享同一个事件循环,避免多个Tk()实例可能带来的奇怪问题(比如变量不共享、事件冲突之类的)。给你个简单示例:

from tkinter import *

x1 = Tk()

def xd():
    x1.destroy()
    x2 = Toplevel()
    # 给x2加个标签示例
    Label(x2, text="新窗口").pack()
    x2.mainloop()

boton = Button(x1, text="XD", command=xd)
boton.pack()

x1.mainloop()

内容的提问来源于stack exchange,提问作者Fire Frekox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:36:11