3

我只想要相当于关闭和重新打开我的主程序。我想在单击下拉菜单中的类似“新”的选项时调用它。比如调用 root.destroy() 然后重新启动主循环。

我怎样才能完成这项工作?

4

3 回答 3

4

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

方法一:假头。创建应用程序时,不要将所有小部件都放在根窗口中。相反,隐藏根窗口并创建一个代表您的应用程序的新顶层。当您重新启动时,只需破坏新的顶层并重新运行所有启动逻辑即可。

方法二:nuke 和 pave。概念相似,但执行方式略有不同。在此模型中,当您想要重新启动时,您只需删除主窗口中的所有小部件,将几何图形重置为 null(因此窗口将再次根据其内容调整自身大小),然后运行绘制所有其他小部件的逻辑.

方法三:如果它第一次起作用...正如 Martin v. Löwis 所建议的,只需让您的程序执行该程序的一个新实例,然后退出。

前两种方法可能更快,并且具有保留当前环境的(不利)优势。例如,您可以保存剪贴板的副本、列宽等。第三种方法绝对保证空白。

于 2009-04-09T02:08:10.420 回答
2

如果您在 Unix 上,请使用 os.execv 重新启动整个应用程序。确保传递所有命令行参数等。

于 2009-04-08T22:09:52.520 回答
1

您可以将所有 GUI 构建逻辑和初始状态代码从主循环中取出,并将其放入函数中。从主循环调用这些函数(类似于:buildgui() 和 initstate()),然后,当用户单击您的菜单图标时,只需调用 initstate() 将其设置为应用程序首次启动时的状态。

于 2009-04-08T22:25:23.763 回答