重置主GUI窗口

3 投票
4 回答
6594 浏览
提问于 2025-04-15 11:06

我想要的就是关闭然后重新打开我的主程序。也就是说,当我从下拉菜单中点击一个类似“新建”的选项时,我希望能触发这个操作。就像调用 root.destroy() 然后重新启动主循环一样。

我该怎么做呢?

4 个回答

2

如果你在使用Unix系统,可以通过os.execv来重启整个应用程序。记得把所有的命令行参数也一起传过去。

4

解决这个问题的方法至少有三种。

第一种方法:头部假象。在你创建应用的时候,不要把所有的组件都放在主窗口里。相反,可以先隐藏主窗口,然后创建一个新的顶层窗口来代表你的应用。当你需要重启的时候,只需要销毁那个新窗口,然后重新运行所有的启动逻辑就可以了。

第二种方法:彻底重建。这个方法的概念和第一种类似,但执行方式稍有不同。在这种情况下,当你想要重启的时候,只需删除主窗口里的所有组件,把窗口的大小重置为默认(这样窗口就会根据内容自动调整大小),然后再运行逻辑来绘制其他组件。

第三种方法:如果第一次成功了... 正如Martin v. Löwis所建议的,直接让你的程序执行一个新的实例,然后退出当前程序。

前两种方法可能会更快,并且有一个(不一定是优点)好处,就是可以保留当前的环境。例如,你可以保存剪贴板的内容、列宽等等。而第三种方法则绝对保证会有一个干净的状态。

1

你可以把所有的图形界面(GUI)构建逻辑和初始状态的代码从主循环中提取出来,放到一些函数里。然后在主循环中调用这些函数(比如:buildgui() 和 initstate())。这样,当用户点击你的菜单图标时,只需要调用 initstate(),就可以把界面恢复到应用程序刚开始时的样子。

撰写回答