如何使用python-xlib管理我的应用程序窗口?

7
我希望找到一种适用于Linux(使用X11)的方法来控制我使用Python编程的应用程序的窗口几何。所有的研究都指向使用python-xlib,但该文档非常不完善。
我想要实现的目标是:
- 定义窗口在屏幕上的位置 - 定义最小和最大尺寸 - 启用/禁用窗口调整大小 - 保留屏幕空间以供窗口使用 - 使窗口保持在上方/下方 - 跳过或不跳过任务栏(也称为窗口列表) - 设置窗口装饰/无装饰 - 设置窗口标志(正常、弹出、对话框、闪屏、停靠、忽略)
注:我不想使用Xlib创建窗口,而是想告诉X如何处理我使用某些GUI库(例如PyQt)创建的窗口。
我该怎么做?我意识到这个问题相当大:您是否至少有提示,可以让我获得我的窗口?在模块的哪个位置可以找到答案?

编辑: n.m.的答案提供了很好的资源,还有Unix StackExchange上的另一个Q&A,其中提供了一个很好的示例,说明如何控制由X显示的应用程序窗口。

2个回答

2

谢谢,我会查看文档。所谓“获取窗口”,我的意思是:我想用PyGI、PyQt、PyWx或Kivy在Python中创建我的窗口,然后我想在X管理的窗口中找到这个窗口,并告诉X这个窗口应该按照我想要的方式处理,例如在屏幕上保留空间。因此,我不想使用xlib创建窗口,我只想告诉X窗口管理器如何处理它。我认为我从这篇文章中得到了一些有趣的线索。 (http://unix.stackexchange.com/questions/5999/setting-the-window-dimensions-of-a-running-application) - neydroydrec
哈!ICCM看起来就是我需要的开始。现在我仍然需要一些关于Python-xlib的具体信息。 - neydroydrec
create_window 返回一个 Python 类 Window 的对象,该对象应包含一个底层窗口句柄,也称为窗口 ID(一些整数)。您可能永远不应直接使用此句柄。库应在 Window 类的方法中封装所有必要的服务,并且可能在几个其他函数中接受 Window 对象作为参数。 - n. m.

1

我昨天才发现这个,与使用各种xdotoolwmctrlgtktkinter来移动窗口相比,我认为它很棒:

def x11_move_window(window_id_dec, x, y, width, height):
    """ Use x11 library to move window From:
        https://gist.github.com/chipolux/13963019c6ca4a2fed348a36c17e1277
    """

    import Xlib.display

    d = Xlib.display.Display()
    window = d.create_resource_object('window', window_id_dec)
    window.configure(x=x, y=y, width=width, height=height, border_width=0,
                     stack_mode=Xlib.X.Above)
    d.sync()

请注意,如果您使用 wmctrl 来获取窗口 ID,则在调用 x11_move_window 之前需要将其从十六进制转换为十进制:

    window_id_hex = \
        os.popen('wmctrl -l | grep gone_fishing.png').read().strip().split()[0]

    window_id_dec = int(window_id_hex, 16)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接