Как получить окно GDK от XID?
Я потерян в версии 3.. в python2+gdk2 это:
#!/usr/bin/env python2
import gtk
gtk.gdk.window_process_all_updates()
window_xid = 54525964
gdk_window = gtk.gdk.window_foreign_new(window_xid)
что в значительной степени прямо вперед. Но тогда ужас
#!/usr/bin/env python3
from gi.repository import xlib
from gi.repository import Gdk
from gi.repository import GdkX11
Gdk.Window.process_all_updates()
xlib_window = "???????"
gdk_display = GdkX11.X11Display.get_default()
gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)
xlib убивает меня.. Я ничего не могу с этим поделать. Кто-нибудь работал с этим раньше?
Документация, которую я прочитал уже несколько раз: Gdk3, Xlib
Получение окна из его xid было самым быстрым способом получения скриншота в python2. Думаю, я попробую другой способ в python3... какие-нибудь идеи? может быть peek_children из корневого окна?? но тогда как я узнаю, что это окно, которое я хочу?
1 ответ
Решение
Window
в X11 так же, как XID
, Есть просто определение типа от одного к другому.
Так что в коде C gdk_x11_window_foreign_new_for_display()
просто принимает Window
или же XID
, который в основном целое число. Это также работает в Python, используя самоанализ:
#!/usr/bin/env python3
from gi.repository import Gdk
from gi.repository import GdkX11
Gdk.Window.process_all_updates()
xlib_window = 0x2a00005 # from xwininfo command
gdk_display = GdkX11.X11Display.get_default()
gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)
print gdk_window.get_geometry()