重置主GUI窗口
我想要的就是关闭然后重新打开我的主程序。也就是说,当我从下拉菜单中点击一个类似“新建”的选项时,我希望能触发这个操作。就像调用 root.destroy() 然后重新启动主循环一样。
我该怎么做呢?
4 个回答
2
如果你在使用Unix系统,可以通过os.execv来重启整个应用程序。记得把所有的命令行参数也一起传过去。
4
解决这个问题的方法至少有三种。
第一种方法:头部假象。在你创建应用的时候,不要把所有的组件都放在主窗口里。相反,可以先隐藏主窗口,然后创建一个新的顶层窗口来代表你的应用。当你需要重启的时候,只需要销毁那个新窗口,然后重新运行所有的启动逻辑就可以了。
第二种方法:彻底重建。这个方法的概念和第一种类似,但执行方式稍有不同。在这种情况下,当你想要重启的时候,只需删除主窗口里的所有组件,把窗口的大小重置为默认(这样窗口就会根据内容自动调整大小),然后再运行逻辑来绘制其他组件。
第三种方法:如果第一次成功了... 正如Martin v. Löwis所建议的,直接让你的程序执行一个新的实例,然后退出当前程序。
前两种方法可能会更快,并且有一个(不一定是优点)好处,就是可以保留当前的环境。例如,你可以保存剪贴板的内容、列宽等等。而第三种方法则绝对保证会有一个干净的状态。
1
你可以把所有的图形界面(GUI)构建逻辑和初始状态的代码从主循环中提取出来,放到一些函数里。然后在主循环中调用这些函数(比如:buildgui() 和 initstate())。这样,当用户点击你的菜单图标时,只需要调用 initstate(),就可以把界面恢复到应用程序刚开始时的样子。