使用Xlib在python中获取窗口位置和大小

Lis*_*yen 6 python xlib

我需要找到窗口位置和大小,但我无法弄清楚如何.例如,如果我尝试:

id.get_geometry()    # "id" is Xlib.display.Window
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:

data = {'height': 2540,
'width': 1440,
'depth': 24,
'y': 0, 'x': 0,
'border_width': 0
'root': <Xlib.display.Window 0x0000026a>
'sequence_number': 63}
Run Code Online (Sandbox Code Playgroud)

我需要找到窗口位置和大小,所以我的问题是:"y","x"和"border_width"总是0; 更糟糕的是,"高度"和"宽度"在没有窗框的情况下返回.

在这种情况下,在我的X屏幕上(其尺寸为4400x2560)我预期x = 1280,y = 0,宽度= 1440,高度= 2560.

换句话说,我正在寻找python等价物:

#!/bin/bash
id=$1
wmiface framePosition $id
wmiface frameSize $id
Run Code Online (Sandbox Code Playgroud)

如果您认为Xlib不是我想要的,请随意在python中提供非Xlib解决方案,如果它可以将window id作为参数(如上面的bash脚本).在python代码中使用bash脚本输出的明显解决方法感觉不对.

And*_*rov 3

您可能正在使用重定窗口管理器,并且由于此 id 窗口的 x 和 y 为零。检查父窗口的坐标(即窗口管理器框架)

  • `parent = id.query_tree().parent` (3认同)
  • 非常感谢您的帮助!以下行允许我获取框架几何形状:“id.query_tree().parent.query_tree().parent.get_geometry()”。WM 框架是客户端窗口的祖父母(至少在 KWin 中)。 (2认同)
  • 我建议独立于 wm 走到 root 并计算每一步的相对 x,y (2认同)