问题描述
我正在尝试遍历 python-xlib 窗口对象列表,以便在显示器上设置它们的相对堆叠顺序。我的目标是通过抓取窗口的选择列表,然后相对于某个顺序堆叠它们,为彼此堆叠的窗口呈现一种轮播查看键盘快捷键。但是到目前为止,我只能向前/向后推动当前活动窗口。
Q:
如何遍历这些窗口以设置它们的相对顺序,然后将这些窗口绘制到显示器上?备用解决方案可能是将活动焦点推送到这些窗口之一,但我也无法使其正常工作。
以下是相关的代码片段。可以在 https://github.com/1mikegrn/snappyzones/tree/cycle_windows/src/snappyzones
找到完整的项目源代码def active_window(display,window_id=None):
if not window_id:
window_id = (
display.screen()
.root.get_full_property(
display.intern_atom("_NET_ACTIVE_WINDOW"),X.AnyPropertyType
)
.value[0]
)
try:
return display.create_resource_object("window",window_id)
except XError:
return None
def cycle_windows(self,keysym):
try:
display = display()
window = active_window(display).query_tree().parent.query_tree().parent
root = display.screen().root
tree = root.query_tree()
stack = [
item
for item in tree.children
if all(
getattr(item.get_geometry(),x) == getattr(window.get_geometry(),x)
for x in ("x","y","width","height")
)
]
if keysym == XK.XK_Up:
item = active_window(display,stack[0].id)
item.configure(stack_mode=X.Below)
display.set_input_focus(stack[1],X.RevertToParent,X.CurrentTime)
elif keysym == XK.XK_Down:
item = active_window(display,stack[-1].id)
item.configure(stack_mode=X.Above)
display.sync()
except BadWindow as e:
print(e)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)