ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python:如何使用Xlib在工作区之间切换?

2019-07-05 06:55:56  阅读:192  来源: 互联网

标签:python window pygtk xlib


如何使用Python与Xlib模块在窗口管理器的工作区之间切换?

这是我最有希望的尝试:

#!/usr/bin/python

from Xlib import X, display, error, Xatom, Xutil
import Xlib.protocol.event

screen = Xlib.display.Display().screen()
root   = screen.root


def sendEvent(win, ctype, data, mask=None):
        """ Send a ClientMessage event to the root """
        data = (data+[0]*(5-len(data)))[:5]
        ev = Xlib.protocol.event.ClientMessage(window=win, client_type=ctype, data=(32,(data)))

        if not mask:
            mask = (X.SubstructureRedirectMask|X.SubstructureNotifyMask)
        root.send_event(ev, event_mask=mask)


# switch to desktop 2
sendEvent(root, Xlib.display.Display().intern_atom("_NET_CURRENT_DESKTOP"), [2])

以上代码在PyPanel源的各个地方被无耻地窃取;不幸的是,它没有做任何事情,甚至没有产生警告/异常.我在这里错过了什么吗?

我正在使用Python和PyGTK. Xlib似乎是切换桌面的正确选择.我不打算使用wnck(错误的Python模块)或类似的东西,但无论如何我都会感激任何指针.

我可能会补充一点,这是我第一次尝试使用Xlib(或PyGTK)编写Python应用程序.

解决方法:

显然,您需要处理同一个Display对象,然后在最后刷新它.就像是:

display = Xlib.display.Display()
screen = display.screen()
root = screen.root

# ...

sendEvent(root, display.intern_atom("_NET_CURRENT_DESKTOP"), [1, X.CurrentTime])
display.flush()

信用:来自a very similar thread的想法(几乎可行).

附:顺便说一句,桌面编号从0开始.

标签:python,window,pygtk,xlib
来源: https://codeday.me/bug/20190705/1385111.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有