如何用面向对象的Tkinter代码实现多窗口的图标化与还原?
面向对象Tkinter多窗口返回还原父窗口解决方案
核心问题
当前racedetailsWindow类没有持有父窗口(enterWindow)的引用,导致关闭子窗口时无法还原被最小化的父窗口。只需将父窗口实例传递给子窗口,就能在关闭逻辑中调用父窗口的还原方法。
修改后的代码
1. 打开窗口的代码调整
def openselect(self): self.selectedRace = self.viewBox.get() self.newwindow = Toplevel(self.master) # 新增传递父窗口实例给子窗口 racedetailsWindow(self.newwindow, self.selectedRace, self.master) self.master.iconify() class racedetailsWindow(): # 新增parent参数接收父窗口实例 def __init__(self, master, selectedRace, parent): self.master = master self.parent = parent # 保存父窗口引用 self.master.title("Race Details") self.master.geometry("650x400") self.master.config(bg="white")
2. 返回按钮及close方法调整
# buttons: back button and enter button self.back = Button(self.master, text ="Back", command = self.close, width=10, fg="red").place(x=500,y=350) self.enter = Button(self.master, text="ENTER!", font=(15), command=self.gotoenter, width=15, fg="red").place(x=10,y=350) def close(self): self.master.destroy() # 销毁当前子窗口 self.parent.deiconify() # 还原被图标化的父窗口
说明
- 创建子窗口实例时,将父窗口对象(
self.master即enterWindow)作为参数传入,在子窗口类中保存为self.parent。 - 关闭子窗口时,先销毁当前窗口,再调用父窗口的
deiconify()方法,即可完成父窗口的还原。
内容的提问来源于stack exchange,提问作者dexta
相关产品推荐
相关产品推荐

