微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环通过 X11 windows python-xlib

如何解决循环通过 X11 windows python-xlib

我正在尝试遍历 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 举报,一经查实,本站将立刻删除。