Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何进入tkinter中的下一个窗口_Python_Tkinter - Fatal编程技术网

Python 如何进入tkinter中的下一个窗口

Python 如何进入tkinter中的下一个窗口,python,tkinter,Python,Tkinter,很抱歉这个问题措辞含糊不清。 我已经用Tkinter创建了一个登录系统,但不知道如何为我想要创建的应用程序的主菜单创建一个新窗口。 我尝试打开一个新窗口,但登录窗口仍然保持打开状态,如果我尝试使用.destroy命令删除它,它会关闭整个窗口。 有没有办法完全刷新/打开一个新窗口 有没有办法完全刷新/打开一个新窗口 最简单的解决方案是将所有“窗口”放在框架内——登录窗口都在一个框架内,主窗口都在一个框架内,等等 然后,当您准备从一个切换到另一个时,只需销毁登录框架并创建主窗口框架,而无需销毁主窗口

很抱歉这个问题措辞含糊不清。 我已经用Tkinter创建了一个登录系统,但不知道如何为我想要创建的应用程序的主菜单创建一个新窗口。 我尝试打开一个新窗口,但登录窗口仍然保持打开状态,如果我尝试使用.destroy命令删除它,它会关闭整个窗口。 有没有办法完全刷新/打开一个新窗口

有没有办法完全刷新/打开一个新窗口

最简单的解决方案是将所有“窗口”放在框架内——登录窗口都在一个框架内,主窗口都在一个框架内,等等

然后,当您准备从一个切换到另一个时,只需销毁登录框架并创建主窗口框架,而无需销毁主窗口

类似的解决方案是简单地删除根窗口中的所有子窗口,然后添加新的小部件。如果一切都在一个框架中,这是最简单的,但是您可以通过在根窗口上调用
winfou children
并迭代结果,逐个销毁所有小部件

有没有办法完全刷新/打开一个新窗口

最简单的解决方案是将所有“窗口”放在框架内——登录窗口都在一个框架内,主窗口都在一个框架内,等等

然后,当您准备从一个切换到另一个时,只需销毁登录框架并创建主窗口框架,而无需销毁主窗口


类似的解决方案是简单地删除根窗口中的所有子窗口,然后添加新的小部件。如果一切都在一个框架中,这是最简单的,但是您可以通过在根窗口上调用
winfou children
并迭代结果来逐个销毁所有小部件。

您可以调用
old\u root.destroy()
,这将关闭旧窗口。它还将重置tkinter中的所有全局变量,这样就好像您第一次导入tkinter一样。因此,您可以使用
tk.tk()
创建一个新的tkinter窗口。我发现这种方法更直观,更容易理解/实施


编辑:在调用
old\u root.destroy()
之前,您需要首先从条目/其他小部件中提取数据,否则数据也将被删除。

您可以调用
old\u root.destroy()
,这将关闭旧窗口。它还将重置tkinter中的所有全局变量,这样就好像您第一次导入tkinter一样。因此,您可以使用
tk.tk()
创建一个新的tkinter窗口。我发现这种方法更直观,更容易理解/实施



编辑:在调用
old\u root.destroy()
之前,您需要首先从条目/其他小部件中提取数据,否则数据也将被删除。

使用
Toplevel
root.draw()
同时隐藏窗口。嘿,谢谢您的回答。或者创建一个新的
tk.tk
并调用
old\u root.destroy()
,对您不打算使用的旧窗口执行此操作。如果您先调用
old\u root.destroy()
,它将切换默认的tkinter窗口,这样您在使用新窗口时就不会遇到任何问题。使用
Toplevel
root.draw()
同时隐藏窗口。谢谢您的回答。或者创建一个新的
tk.tk
并调用
old\u root.destroy())
在您不打算使用的旧版本上。如果您先调用
old_root.destroy()
,它将切换默认的tkinter窗口,这样您在使用新窗口时就不会遇到任何问题。有时这不是一个好主意,尤其是当您想将根绑定到按键时(例如
)。@TheLizzard:yes,每个设计决策都有权衡。如果你破坏了旧窗口,就好像你第一次导入tkinter一样。因此,您可以创建一个新窗口。我发现这是最直观的方式。而且它不会有我测试的任何副作用。@TheLizzard:“如果你破坏了旧窗口,就好像你第一次导入tkinter一样。”-这不是100%正确。以前可能创建的全局变量仍然存在。@TheLizzard:是的,tkinter变量将被重置,但其他变量不会重置。您暗示所有数据都已重置,但事实并非如此。有时这不是一个好主意,尤其是当您想将根绑定到按键时(例如
“”
)。@TheLizzard:是的,每个设计决策都有权衡。如果您破坏旧窗口,就好像您第一次导入tkinter一样。因此,您可以创建一个新窗口。我发现这是最直观的方式。而且它不会有我测试的任何副作用。@TheLizzard:“如果你破坏了旧窗口,就好像你第一次导入tkinter一样。”-这不是100%正确。以前可能创建的全局变量仍然存在。@TheLizzard:是的,tkinter变量将被重置,但其他变量不会重置。您暗示所有数据都已重置,但事实并非如此。通常情况下,您构建应用程序的级别,并且可能希望在进一步的应用程序中使用登录的数据。我不能同意你的观点view@Atlas435这就是为什么您首先从条目中取出数据,然后销毁窗口。如果您有python变量中的数据,那么它不会受到窗口破坏的影响。我将编辑我的答案,使之更清楚。另外,旧窗口的所有绑定都将被调用。感谢您指出这一点。但我仍然怀疑这是一个有效的选择。想象一下,一个巨大的应用程序,你只想注销并与另一个用户登录。您需要销毁应用程序并重新加载所有应用程序,只是为了更改用户@Atlas435,否则所有绑定仍然存在。我