【发布时间】:2023-04-02 21:50:01
【问题描述】:
我想在 linux (kde,vnc) 上打开一个 Tcl/Tk 对话框并将一些信息放入:
package require Tk
toplevel .my
pack [label .my.l -text "hallo"]
执行此操作,对话框打开,新对话框获得焦点。
我怎样才能防止这种情况发生?
package require Tk
toplevel .my
<something with> .my
pack [label .my.l -text "hallo"]
我看到了几个关于类似主题的问题,但没有关于 Tcl/Tk 的问题。
【问题讨论】:
-
焦点应该在哪里?您可以使用
focus .将焦点更改为另一个窗口(例如,我在这里使用.)。否则,我不确定您为什么要阻止焦点。我发现我实际上想要在为应用程序编写代码时让我的子窗口成为焦点,否则它会困扰我。 -
它与窗口管理器的关系比与 Tk 的关系更大。不幸的是,没有多少窗口管理器可以防止焦点窃取(我最近读到 Cinnamon 支持这一点)。我真的很想拥有这个功能。
-
@Jerry: 假设我有一个 XTERM 并运行一个 TK Gui,焦点在 TK GUI,我必须重新关注。
-
如果是窗口管理器的问题,能否在TK GUI中获取当前的WindowsID infocus,保存,打开GUI并重新关注原始ID?
-
@tbasien 嗯,如果你在 Windows 上,我会说你必须获取 twapi 包,然后获取 XTERM 的窗口句柄(例如,如果窗口标题是 XTERM,那么你使用
set handle [::twapi::find_windows -text "XTERM"]获取窗口句柄,然后::twapi::show_window [lindex $handle 0]将焦点设置到该窗口)。如果获得了多个句柄,则需要优化查找。我不确定mac是否有类似的包:(