为何定义一个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
相关产品推荐
相关产品推荐

