我的申请是用 tcl/tk 编写的。当从任务栏恢复主窗口时,我需要将辅助窗口(对话框)带到顶部(在主窗口的顶部)。我需要在 tcl/tk 中捕获窗口恢复事件才能做到这一点。我尝试了 Map/Unmap 事件捕获,但是当窗口恢复时它不会被触发。
通常的做法是使辅助窗口(对话框)在主窗口(容器)上短暂存在。通过这样做,对话框将自动与容器一起图标化和去图标化。
toplevel .t -width 400 -height 400
toplevel .t.s
wm transient .t.s .t
副作用是对话框窗口的任务栏中不显示任何图标,并且它们以容器窗口为中心。如果您反对这样做,您可以使用 Map 和 Unmap 事件自行完成。您没有显示任何代码,因此很难说出为什么您得出这些事件不会触发的结论。这对我有用(linux x86_64,Tk 9.0.0):
toplevel .t -width 400 -height 400
toplevel .t.s
bind .t <Map> {wm deiconify .t.s}
bind .t <Unmap> {wm iconify .t.s}
请注意,顶层内的小部件通常会将其顶层窗口包含在绑定标签中。这意味着绑定到顶层的 Map 和 Unmap 事件将为顶层内的每个小部件触发。为了防止多次调用事件处理程序,您可能需要检查 Map/Unmap 事件触发的是哪个小部件,并且仅在事件引用顶层本身时才采取操作。或者您可以将映射/取消映射事件绑定到顶层内选定的小部件。选择哪个选项取决于具体情况。