我正在使用名为“GUI Builder(Komodo Pro)”的Tcl / Tk图形用户界面构建器。我已经构建了三个不同的窗口,每个窗口在单击相应的按钮后都会打开。我设法让窗户打开并“退出”,但该过程在后台保持打开状态。如果用户打开足够的窗口,程序将因大量窗口而崩溃。
我的问题是如何让窗口完全关闭而不是退出,从而节省一些计算机的内存和处理能力?
答案 0 :(得分:3)
当你点击一个窗口的窗口管理器关闭按钮(它的样式有点变化,但通常是红色的“X”)时,Tk最终会收到WM_DELETE_WINDOW
协议事件(非X11平台是在Tk的较低层内翻译成这个。然后,Tk以“适当的方式”响应该窗口的 。
默认情况下,在向其发送WM_DELETE_WINDOW时会销毁窗口;在简单的情况下,这是正确的做法。您还可以通过执行以下操作明确启用此功能:
wm protocol $toplevel WM_DELETE_WINDOW [list destroy $toplevel]
你通常不会为此烦恼;
具有相同的效果。默认值(当你有一个空的处理程序时会发生这种情况)或者,你可以退出窗口(wm withdraw $toplevel
而不是destroy $toplevel
)或iconify(wm iconify $toplevel
),甚至弹出一个对话框来检查用户是否真的确定
启用Tk的应用程序通常会在进入主事件循环后退出,并关闭所有顶层窗口。在最简单的情况下(只有一个加载了Tk的Tcl解释器),这就像说.
窗口被销毁后应用程序停止一样。但是,如果您通过执行tclsh
在package require Tk
中运行Tk应用程序(在代码中存在集成Tcl和Tk的魔力),我不完全确定这是否属实。找出事情是否正确的最佳方法是自己测试;它应该只需要一点时间......