使用类在Tkinter中创建子窗口时出现重复窗口的问题
Tkinter创建子窗口时出现双窗口问题的解决方法
问题原因
你的代码中ChildWindow继承了Window类,而Window的__init__方法会创建一个新的Tk()主窗口实例。在ChildWindow的初始化过程中,你先创建了Toplevel子窗口,随后又调用Window.__init__(self, title, geometry, icon),这就额外触发了一个Tk()实例的创建,最终导致两个窗口出现。
解决方案
ChildWindow不需要继承Window,因为它是依附于主窗口的子窗口,无需创建新的主窗口实例。重构代码如下:
from tkinter import Tk, Toplevel class Window: def __init__(self, title, geometry, icon='default.ico'): self.root = Tk() self.root.title(title) self.root.geometry(geometry) self.root.iconbitmap(icon) def run(self): self.root.mainloop() def child_window(self, title, geometry, icon='default.ico'): ChildWindow(self.root, title, geometry, icon) class ChildWindow: def __init__(self, parent, title, geometry, icon): self.child = Toplevel(parent) self.child.title(title) self.child.geometry(geometry) self.child.iconbitmap(icon) x = Window('Window', '600x800') x.child_window('Child window', '200x300') x.run()
关键修正点
- 移除
ChildWindow对Window的继承,避免重复创建Tk()主窗口 - 直接在
ChildWindow的初始化方法中配置Toplevel对象的属性,无需依赖父类的初始化逻辑 - 子窗口不需要单独的
run方法,主窗口的mainloop会统一管理所有窗口的事件循环
内容的提问来源于stack exchange,提问作者Uvelka
相关产品推荐
相关产品推荐

