在 Python xlib 中绘制窗口边框



我正在开发一个使用 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()

但是,我从中一无所获 - 我可以添加 print 语句来证明我的程序确实正在运行与事件关联的回调函数,但我在边框上绝对没有颜色变化。谁能确定我在这里到底错过了什么?如果有帮助,我可以粘贴一个更完整的示例。我不确定它会,因为这是唯一处理边框的位。

看起来这是完整的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()

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

最新更新