5

我正在开发一个使用 python 的 xlib 绑定​​编写的窗口管理器,并且我(最初)试图以更 Pythonic 的方式模仿 dwm 的行为。我已经得到了很多我需要的东西,但是我在使用 X 的内置窗口边框功能来指示窗口焦点时遇到了麻烦。

假设我有一个 Xlib 窗口类的实例并且我正在正确阅读文档,这应该做我想做的事情(至少现在) - 将预先存在的窗口的窗口边框设置为花哨的颜色并设置边框宽度为 2px。

def set_active_border(self, window):
    border_color = self.colormap.alloc_named_color(\
        "#ff00ff").pixel
    window.change_attributes(None,border_pixel=border_color,
           border_width = 2 )
    self.dpy.sync()

但是,我没有得到任何结果——我可以添加打印语句来证明我的程序确实在运行与事件关联的回调函数,但我在边框上绝对没有颜色变化。谁能确定我在这里缺少什么?如果有帮助,我可以粘贴一个更完整的示例。我不确定它会不会,因为这是处理边界的唯一位。

4

1 回答 1

4

看起来这是完整的 PEBKAC。我找到了答案。基本上,我是这样做的:

def set_active_border(self, window):
    border_color = self.colormap.alloc_named_color(
        "#ff00ff"
    ).pixel
    window.configure(border_width=2)
    window.change_attributes(
         None,
         border_pixel=border_color,
         border_width=2)
    self.dpy.sync()

显然,这让 X 感到困惑,以至于它什么也没做。我偶然发现的解决方案是从 window.change_attributes() 调用中删除 border_width 部分,如下所示:

def set_active_border(self, window):
    border_color = self.colormap.alloc_named_color(
        "#ff00ff"
    ).pixel
    window.configure(border_width=2)
    window.change_attributes(
        None,
        border_pixel=border_color
    )
    self.dpy.sync()

我希望这对以后的人有所帮助!

于 2012-04-22T13:27:15.243 回答