我想找到一个linux范围(在它使用X11的方式)方式来控制我的应用程序的窗口几何,我用Python编程。我的所有研究都指向使用python-xlib,这恰好记录得非常糟糕。
我想要达到的目标是:
注意:我不想创建使用Xlib,而是想告诉X如何使用某些GUI库(例如PyQt)创建的窗口。
我该怎么做呢?我意识到这个问题是一个很大的问题:你是否至少知道如何抓住我的窗户?我可以在模块中找到答案吗?
编辑: nm的答案提供了很多资源,还有another Q&A on Unix StackExchange提供了一个关于如何控制X显示的应用程序窗口的一个很好的示例。
答案 0 :(得分:2)
您需要知道的第一个关键字是ICCCM。您需要熟悉ICCCM手册(请参阅http://tronche.com/gui/x/icccm/)和相同的FreeDesktop扩展(请参阅http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html)。至于你的问题
我怎么能抓住我的窗户?
我不太明白。你调用create_window
,该函数返回你的Window对象。或者你的意思是其他什么?
答案 1 :(得分:0)
昨天刚发现这个,我认为与使用各种 xdotool
、wmctrl
、gtk
和 tkinter
来移动窗口相比,它很棒:
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)