tkinter 页面跳转后原页面的text不能插入
时间: 2023-11-17 15:08:19 浏览: 45
这个问题可能是因为你没有正确地管理Tkinter窗口之间的引用,导致你的原始窗口被销毁,从而在新窗口返回后无法访问原始窗口的控件。为了解决这个问题,你可以采用以下方法之一:
1. 使用顶层窗口而不是销毁旧窗口:
在这种情况下,你可以使用`Toplevel`组件来创建新窗口,而不是销毁旧窗口并创建新窗口。这样,你就可以在新窗口返回后访问原始窗口的控件。下面是一个使用`Toplevel`的示例代码:
```
import tkinter as tk
def open_new_window():
# 创建新窗口
new_window = tk.Toplevel(root)
# 隐藏原窗口
root.withdraw()
# 在新窗口中添加控件
tk.Label(new_window, text="新窗口").pack()
# 让新窗口返回后重新显示原窗口
new_window.protocol("WM_DELETE_WINDOW", lambda: [new_window.destroy(), root.deiconify()])
root = tk.Tk()
tk.Label(root, text="原窗口").pack()
tk.Button(root, text="打开新窗口", command=open_new_window).pack()
root.mainloop()
```
在上面的代码中,我们使用`Toplevel`组件来创建新窗口,然后使用`root.withdraw()`方法隐藏原始窗口。当新窗口被关闭时,我们使用`lambda`表达式来同时销毁新窗口并重新显示原始窗口。
2. 使用类来管理窗口引用:
在这种情况下,你可以使用一个类来管理窗口之间的引用,并在需要时访问原始窗口的控件。下面是一个使用类来管理窗口引用的示例代码:
```
import tkinter as tk
class MainWindow:
def __init__(self):
self.root = tk.Tk()
tk.Label(self.root, text="原窗口").pack()
tk.Button(self.root, text="打开新窗口", command=self.open_new_window).pack()
self.root.mainloop()
def open_new_window(self):
# 创建新窗口
self.new_window = tk.Toplevel(self.root)
# 在新窗口中添加控件
tk.Label(self.new_window, text="新窗口").pack()
# 在新窗口中添加返回按钮
tk.Button(self.new_window, text="返回", command=self.return_to_main_window).pack()
def return_to_main_window(self):
# 销毁新窗口并重新显示原窗口
self.new_window.destroy()
self.root.deiconify()
# 创建主窗口对象
main_window = MainWindow()
```
在上面的代码中,我们使用`MainWindow`类来创建并管理主窗口以及相关的控件。当打开新窗口时,我们创建一个`Toplevel`窗口,并在类中存储对它的引用。当返回按钮被点击时,我们销毁新窗口并重新显示原始窗口。
无论你选择哪种方法,都要确保正确地管理窗口之间的引用,以便在需要时能够访问原始窗口的控件。