【问题标题】:Persistent Windows in PyGTKPyGTK 中的持久化窗口
【发布时间】:2020-02-18 01:29:44
【问题描述】:

有没有办法强制 gtk.Window 对象忽略窗口管理器的显示/隐藏命令,例如“iconify”和“显示桌面”?

我正在尝试创建一个固定在桌面上的持久窗口,当桌面暴露时,它不会与所有其他窗口一起消失。

编辑:我想我特别想知道的是,是否可以使用 PyGTK 重现在诸如停靠栏、桌面小部件、系统托盘等应用程序中发现的行为? p>

【问题讨论】:

  • 你为什么要这样做?忽略用户隐藏所有窗口的请求似乎是非常糟糕的做法。
  • 希望构建类似于桌面小部件的东西,其中窗口管理器的“显示桌面”功能可以轻松访问它。尝试为此使用 Window 对象可能是错误的;我愿意接受其他建议。

标签: python gtk pygtk x11


【解决方案1】:

你把它弄反了;不是窗口管理器通过向窗口发送命令来告诉窗口最小化。窗口管理器拥有该窗口,如果它想停止映射一个窗口,它会执行此操作,而无需请求该窗口的许可。

所以我认为答案是否定的。

【讨论】:

  • 那么我想我的问题是,更一般地说,使用 PyGTK 创建桌面小部件的最佳实践方法是什么?
  • 检查是否支持“粘性”窗口,这可能是对管理员不要最小化窗口的正确提示。它通常还会使窗口出现在与所有(虚拟)桌面相同的位置,这可能很好。
  • 我知道“sticky”属性,它可以正常工作,但是我以我想要的方式测试过的任何 WM 都不尊重这一点。
【解决方案2】:

尝试在GtkWindow 上设置GdkWindowTypeHint

gtk_window_set_type_hint(the_window, GDK_WINDOW_TYPE_HINT_UTILITY);

还有多种方法可以使您的窗口不列在寻呼机或任务栏中,并使其显示在所有桌面上。请记住,所有这些行为都取决于窗口管理器的支持。除非您使用非常旧的东西,否则这应该不会造成问题。

【讨论】:

  • 如果你使用一些非常古老的东西,它可能会容易得多:)
【解决方案3】:

list of window type hints 开始,单击显示桌面按钮时仍然只显示两个:

  • gtk.gdk.WINDOW_TYPE_HINT_DESKTOP
  • gtk.gdk.WINDOW_TYPE_HINT_DOCK

这两种情况都会导致您的窗口失去装饰(即没有边框或标题栏),因此移动/调整大小取决于您的应用。 DESKTOP 使窗口始终位于其他窗口之后。 DOCK 使其始终位于前面。

选择 SPLASHSCREEN 会为您提供一个未装饰的窗口,当您单击显示桌面时该窗口仍然隐藏。

如果您想要一个在用户单击“显示桌面”时仍显示的无边框、固定窗口,请使用:

window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)

在调用 window.show() 之前。窗口显示后,您无法更改其类型。

【讨论】:

    【解决方案4】:

    没有收到“这是如何做到这一点”的答案并且做了更多的研究,我可以说——据我所知——没有简单的方法可以使用 PyGTK 实现这种功能。最好的选择是设置窗口管理器提示并让 WM 来做你想做的事情(希望如此)。

    【讨论】:

      【解决方案5】:

      我认为gtk_window_set_type_hint(window, GDK_WINDOW_TYPE_HINT_SPLASHSCREEN) 是您想要的。也是GDK_WINDOW_TYPE_HINT_DOCK,但是窗口一直在最上面,你不能发回去。

      【讨论】:

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