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

使用Tkinter创建全屏Toplevel窗口时出现多余窗口的求助

解决Tkinter创建全屏窗口时出现多余窗口的问题

问题核心在于你使用的Toplevel组件必须依附于主Tk窗口——如果没有显式创建主窗口,tkinter会自动生成一个默认空白窗口,这就是你看到的"多余窗口"。另外代码里先销毁root再创建Toplevel的逻辑也存在问题。

这里提供两种可行的修复方案:

方案一:直接创建全屏主窗口(替代Toplevel)

如果全屏窗口是程序的核心界面,没必要用Toplevel,直接将其作为主Tk实例即可,同时处理初始窗口的显示:

import tkinter as tk
from tkinter import messagebox, Frame
import tkinter.font as TkFont

def startup():
    # 隐藏初始主窗口,而非销毁
    root.withdraw()
    # 创建新的主窗口作为全屏界面
    program = tk.Tk()
    program.attributes('-fullscreen', True)
    # 绑定ESC键退出全屏,方便测试
    program.bind('<Escape>', lambda e: program.destroy())
    program.mainloop()

# 初始化主窗口
root = tk.Tk()
startup()

方案二:隐藏初始窗口后创建Toplevel

如果必须使用Toplevel,要确保创建它之前先隐藏初始主窗口(销毁主窗口会导致所有子窗口一并关闭):

import tkinter as tk
from tkinter import messagebox, Frame
import tkinter.font as TkFont

def startup():
    # 隐藏初始主窗口
    root.withdraw()
    # 创建依附于root的Toplevel全屏窗口
    program = tk.Toplevel(root)
    program.attributes('-fullscreen', True)
    # 绑定ESC键,退出全屏后恢复初始窗口
    program.bind('<Escape>', lambda e: (program.destroy(), root.deiconify()))
    program.mainloop()

root = tk.Tk()
startup()

关键注意点:

  • 不要销毁主窗口后再创建Toplevel,Toplevel的存在依赖主窗口
  • 用withdraw()隐藏初始窗口,deiconify()可按需恢复它
  • 给全屏窗口绑定退出快捷键,提升测试和使用体验

内容的提问来源于stack exchange,提问作者Sydney Myrén

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:22:14