在Tkinter中切换窗口时,列表框项目不会终止的问题可能是由于列表框对象的生命周期管理不当导致的。为了解决这个问题,可以采取以下步骤:
destroy()
方法来销毁列表框对象。get()
方法获取列表框中的项目。下面是一个示例代码,演示了如何在Tkinter中切换窗口时正确处理列表框对象:
import tkinter as tk
class Window1(tk.Toplevel):
def __init__(self, master):
tk.Toplevel.__init__(self, master)
self.listbox = tk.Listbox(self)
self.listbox.pack()
self.listbox.insert(tk.END, "Item 1")
self.listbox.insert(tk.END, "Item 2")
self.listbox.insert(tk.END, "Item 3")
button = tk.Button(self, text="Switch Window", command=self.switch_window)
button.pack()
def switch_window(self):
self.listbox.destroy() # 销毁列表框对象
self.destroy() # 销毁当前窗口
window2 = Window2(self.master, self.listbox.get(0, tk.END)) # 创建新窗口,并传递列表框中的项目
window2.mainloop()
class Window2(tk.Toplevel):
def __init__(self, master, items):
tk.Toplevel.__init__(self, master)
self.listbox = tk.Listbox(self)
self.listbox.pack()
for item in items:
self.listbox.insert(tk.END, item)
button = tk.Button(self, text="Switch Window", command=self.switch_window)
button.pack()
def switch_window(self):
self.listbox.destroy() # 销毁列表框对象
self.destroy() # 销毁当前窗口
window1 = Window1(self.master) # 创建新窗口
window1.mainloop()
class MainApplication(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.button = tk.Button(self, text="Open Window", command=self.open_window)
self.button.pack()
def open_window(self):
self.withdraw() # 隐藏主窗口
window1 = Window1(self) # 创建新窗口
window1.mainloop()
if __name__ == "__main__":
app = MainApplication()
app.mainloop()
在上述示例代码中,首先定义了两个窗口类Window1
和Window2
,分别表示两个窗口。在Window1
中,创建了一个列表框对象,并添加了一些项目。点击"Switch Window"按钮时,会销毁当前窗口和列表框对象,并创建Window2
窗口,将列表框中的项目传递给Window2
。在Window2
中,重新创建列表框对象,并显示之前的项目。点击"Switch Window"按钮时,会销毁当前窗口和列表框对象,并重新创建Window1
窗口。
通过以上的处理,可以确保在切换窗口时,列表框项目会被正确终止和显示。
领取专属 10元无门槛券
手把手带您无忧上云