我正在使用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语句来证明我的程序确实正在运行我与事件关联的回调函数,但我在边框上绝对没有颜色变化。任何人都可以确定我在这里错过了什么?我可以用一个更完整的例子来粘贴,如果有帮助的话。我不确定它会不会因为这是处理边界的唯一一点。
答案 0 :(得分: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()
我希望这可以帮助后来的人!