使用 GNOME 作为桌面环境时如何去图标化和提升 Tk 窗口

How to deiconify and raise Tk window when using GNOME as desktop environment

提问人:Flux 提问时间:11/8/2023 最后编辑:Flux 更新时间:11/9/2023 访问量:43

问:

下面的程序创建一个包含按钮的窗口。单击该按钮时,窗口将图标化(最小化)。3000 毫秒后,窗口应该去图标化并将自己提升到所有其他窗口之上。当我在 GNOME 桌面环境中使用 运行程序时,单击按钮时窗口会按预期图标显示。但是,它不会去图标化,也不会在 3 秒后将自己抬高到所有其他窗口之上。没有错误消息。wish mywindow.tk

proc doSomething {} {
    wm iconify .
    after 3000 {
        wm deiconify .
        raise .
    }
}

button .mybutton -text "Click me" -command doSomething
grid .mybutton

问题的原因是什么?在使用 GNOME 桌面环境时,如何在 Tk 中对窗口进行去图标化并将其提升到所有其他窗口之上?

  • Tcl/Tk 版本:8.6.13
  • GNOME Shell 版本:43.6
  • 我在 Xorg 上使用 GNOME,而不是在 Wayland 上使用 GNOME。
  • 操作系统: Debian 12 bookworm
tcl tk-工具包 GNOME XORG 侏儒外壳

评论


答:

0赞 Donal Fellows 11/9/2023 #1

你对此无能为力。Tk 通过要求窗口管理器执行窗口去图标化和引发 (of s) 操作,但窗口管理器有权忽略该请求。低级 API 就是这样工作的,窗口管理员通常更愿意忽略他们认为不直接对应于真实用户活动的请求。toplevel

内部 Tk 小部件可以直接重新堆叠;Tk 始终自己处理这些调用。

对不起。这不是 Tk 问题,而是窗口管理器策略。

1赞 Flux 11/9/2023 #2

我设法通过在去图标化之前撤回窗口来将窗口去图标化并抬高到所有其他窗口之上:

proc doSomething {} {
    wm iconify .
    after 3000 {
        wm withdraw .
        wm deiconify .
    }
}

button .mybutton -text "Click me" -command doSomething
grid .mybutton

根据 wm wihdraw 的 Tk 文档:

注意:有时似乎有必要撤回一个窗口,然后重新映射它(例如,使用 wm deiconify),以使一些窗口管理器注意窗口属性(如 group)的变化。