Как получить окно GDK от XID? - PullRequest
8 голосов
/ 28 июля 2011

Я потерян в версии 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 Ответ

11 голосов
/ 01 ноября 2011

A 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())
...