【问题标题】:Closing window rather than withdraw TCL关闭窗口而不是撤回TCL
【发布时间】:2013-07-20 04:54:11
【问题描述】:

我正在使用一个用于 Tcl/Tk 的图形用户界面构建器,称为“GUI Builder (Komodo Pro)”。我已经构建了三个不同的窗口,每个窗口都将在单击相应按钮后打开。我设法让窗户打开并“退出”,但该过程在后台保持打开状态。如果用户打开了足够多的窗口,程序将由于窗口数量过多而崩溃。

我的问题是如何让窗口完全关闭而不是退出,从而节省一些计算机内存和处理能力?

【问题讨论】:

  • destory他们。
  • 这和杀死进程一样吗?那么,如果我销毁父窗口,那么这也会杀死所有依赖窗口吗?此外,每次我按下调用另一个窗口的按钮之一时,wish84 进程都会堆积起来。
  • 请提供更多关于你的按钮在做什么的细节

标签: window tcl


【解决方案1】:

当您单击窗口的窗口管理器关闭按钮(样式略有不同,但通常是红色的“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 解释器)这与说应用程序在 . 窗口被销毁时停止是一样的。但是,如果您通过执行package require Tktclsh 中运行Tk 应用程序,我不完全确定这是否正确(集成Tcl 和Tk 的代码中有魔法)。找出事情是否正确的最好方法是自己测试;应该只需要一点时间……

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多