我正在使用一个名为“GUI Builder (Komodo Pro)”的 Tcl/Tk 图形用户界面构建器。我已经构建了三个不同的窗口,每个窗口都将在单击相应按钮后打开。我设法让窗户打开并“退出”,但该过程在后台保持打开状态。如果用户打开足够多的窗口,程序将由于大量窗口而崩溃。
我的问题是如何让窗口完全关闭而不是退出,从而节省一些计算机内存和处理能力?
当您单击窗口的窗口管理器关闭按钮(样式略有不同,但通常是红色的“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
)或图标化(wm iconify $toplevel
),甚至弹出一个对话框来检查用户是否真的确定这一点。
启用 Tk 的应用程序通常在进入主事件循环后退出,所有顶层窗口都已关闭。在最简单的情况下(只有一个加载了 Tk 的 Tcl 解释器)这与说应用程序在.
窗口被销毁后停止相同。tclsh
但是,如果您通过do 运行 Tk 应用程序,我不完全确定这是否属实package require Tk
(集成 Tcl 和 Tk 的代码中有魔力)。找出事情是否正确的最好方法是自己测试;应该只需要一点时间……</p>