如何获取活动窗口位置?现有代码获取位置不更新的问题及修正
问题原因与解决方法
问题原因
你调用active_window.get_geometry()获取的是窗口相对于其父窗口的局部坐标,而非屏幕全局坐标。多数Linux窗口管理器会给应用窗口添加装饰框架(如标题栏、边框),应用窗口自身的局部坐标不会随窗口整体移动而改变,因此输出的位置始终固定。
正确实现代码
from Xlib import display, X d = display.Display() screen = d.screen() root = screen.root # 获取活动窗口ID active_window_id = root.get_full_property( d.intern_atom('_NET_ACTIVE_WINDOW'), X.AnyPropertyType ).value[0] # 处理无效窗口ID的情况 if active_window_id != 0: active_window = d.create_resource_object('window', active_window_id) # 将窗口局部坐标原点转换为屏幕全局坐标 root_coords = active_window.translate_coords(root, 0, 0) x = root_coords.x y = root_coords.y print("window position (screen global):", x, y) else: print("No active window detected") d.close()
代码说明
translate_coords(root, 0, 0)方法会将当前窗口的原点(0,0)转换为根窗口(即整个屏幕)坐标系下的全局坐标,这样就能得到窗口在屏幕上的实际位置,移动窗口时输出的坐标值会随之更新。
内容的提问来源于stack exchange,提问作者yan cao
相关产品推荐
相关产品推荐

