当前位置: 首页 > 面试题库 >

防止GTK中的窗口重叠

慕容安易
2023-03-14
问题内容

我有一个Python / Linux应用程序,它在GTK窗口中显示我需要的信息。为了便于讨论,它的行为应完全像坞站一样-
存在于所有虚拟桌面上,并且最大化的窗口不与之重叠。

第一点很容易,但是我花了几天的时间在显示器上砸头,以求得到第二点-
防止重叠。如果另一个窗口最大化,我的应用程序将不被覆盖。仅将“始终放在顶部”是不够的,因为其他窗口仅位于我的信息栏后面,而不是停在其边缘。

简而言之:使用停靠/面板样式窗口,如何防止其他窗口最大化/超过它?

更新:通过vsemenov解决了问题


问题答案:

使用_NET_WM_STRUT_NET_WM_STRUT_PARTIAL(为了向后兼容)属性在X Window System桌面的边缘保留空间。

使用PyGtk,您可以像这样设置这些属性,假设self.window是gtk.Window的实例:

self.window.get_toplevel().show() # must call show() before property_change()
self.window.get_toplevel().window.property_change("_NET_WM_STRUT", 
    "CARDINAL", 32, gtk.gdk.PROP_MODE_REPLACE, [0, 0, 0, bottom_width])

澄清上面的data参数[0, 0, 0, bottom_width]

此参数按以下顺序指定桌面屏幕每个边框上保留空间的宽度:[left, right, top, bottom]。因此,[0, 0, 0, 50]将在桌面屏幕底部为小部件保留50个像素。

这是一个简单的工作示例

import gtk

class PyGtkWidgetDockExample:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_default_size(100, gtk.gdk.screen_height())
        self.window.move(gtk.gdk.screen_width()-100, 0)
        self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)        
        self.window.show()          
        self.window.window.property_change("_NET_WM_STRUT", "CARDINAL", 32, 
            gtk.gdk.PROP_MODE_REPLACE, [0, 100, 0, 0])

app = PyGtkWidgetDockExample()
gtk.main()


 类似资料:
  • 问题内容: 一些网站具有用于“破解” 附件的代码,这意味着,如果将页面作为父页面加载到内部,则某些Javascript 会将外部窗口重定向到。 通常,此Javascript如下所示: 我的问题是:作为父页面的作者而不是内部页面的作者,如何防止发生此突破? PS在我看来,这应该是跨站点安全性违规,但事实并非如此。 问题答案: 几乎可以满足您的要求: 如果要允许顶级重定向,请指定。

  • 问题内容: 我尝试使用以下代码在关闭浏览器窗口时收到警报: 它可以工作,但是如果页面包含一个超链接,则单击该超链接会引发相同的警报。仅在关闭浏览器窗口时才需要显示警报,而在单击超链接时则不需要。 问题答案: 保持您的代码不变,并使用jQuery处理链接:

  • 问题内容: 我有一个模态框窗口(弹出窗口),其中包含一个iframe, 并且在该 iframe中 有一个可滚动的 div 。 当我滚动iframe的内部DIV,并且达到其上限或下限时, 浏览器本身的窗口就会开始滚动。这是 不想要的行为 。 我已经尝试过类似的操作, 当鼠标进入弹出框区域时,该操作会在onMouseEnter时终止主窗口滚动: e.preventDefault()由于某些原因无法正常

  • 问题内容: 我想禁用窗口大小调整。有任何想法吗? 问题答案: 您可以使用two-arg构造函数指定样式位。默认样式位是: 您实际上想排除该位。如果您要创建自己的: 如果要扩展,则可以通过覆盖来影响Shell样式位:

  • 本文向大家介绍JS打开新窗口防止被浏览器阻止的方法,包括了JS打开新窗口防止被浏览器阻止的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS打开新窗口防止被浏览器阻止的方法。分享给大家供大家参考。具体分析如下: 用传统的window.open()方式打开新窗口,会被浏览器阻止,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢?其实办法还是有的,这里我们就来分析一下如何解决这个问题

  • 请看下面的脸书评论模态框。我试图实现一个类似的效果,即用户点击一个按钮,然后它会打开一个弹出/模态框。此框将允许在新框中滚动(因为它可能是许多页的文本),但不允许在主页上的模态之外滚动。当模态允许在模态窗口内滚动而不允许在其他地方滚动时,如何实现类似的效果?谢谢。