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

为何定义一个Tk窗口却生成两个tkinter窗口?

问题原因及解决办法

为什么会出现两个窗口?

你在style_class.py的顶层代码里写了style = ttk.Style()——这就是关键。tkinter的规则是:当你创建ttk.Style对象时,如果当前程序里还没有任何Tk实例,ttk会自动偷偷创建一个默认的Tk根窗口。

而你后续在main.py里创建a.App()(本质是tk.Tk的子类实例)时,又会生成第二个Tk窗口,两个窗口就这么来的。

怎么解决?

有两种简单的处理方式:

  • 第一种(推荐):把样式初始化的代码放到函数里,等App实例创建好之后再调用。
    修改style_class.py:
    import tkinter as tk
    from tkinter import ttk
    
    def init_style():
        global style
        style = ttk.Style()
    
    然后修改main.py:
    import App_class as a
    import style_class as s
    
    if __name__ == "__main__":
       root = a.App()
       s.init_style()
       root.mainloop()
    
  • 第二种:如果一定要在style_class.py里保留顶层代码,可以先检查是否已有Tk实例,没有的话就不创建样式(但这种方式不如第一种灵活)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:22:03