2011-07-27 5 views
6

내가 .. 버전 3에서 잃었어요입니다 꽤 많이 정직 xid에서 Gdk 창을 얻는 방법? 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) 

. 그러나, 공포 다음 Xlib를 나를 죽이고있다

#!/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) 

.. 나는 그것으로 아무것도 할 수 없어요. 아무도 그것으로 일한 적이 있습니까?

내가 몇 번을 통해 한 문서는 이미 : 그 XID의 창을 얻기 Gdk3, Xlib

가 나는 다른 방법을 시도해야합니다 생각 python2에서 스크린 샷을 얻을 수있는 가장 빠른 방법이었다 python3 .. 어떤 아이디어? 어쩌면 루트 창에서 peek_children ?? 그렇다면 내가 원하는 창인지 어떻게 알 수 있습니까?

답변

9

X11의 WindowXID과 동일하다. 하나의 typedef가 있습니다.

따라서 C 코드 gdk_x11_window_foreign_new_for_display()Window 또는 XID을 기본적으로 허용합니다. 이것은 또한 인트로 스펙 션을 사용하여 파이썬에서 작동합니다 :

#!/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() 
+0

굉장! 고마워. 필자가 처음 시도했을 때 아직 구현되지 않았다고 생각합니다. 파이썬 3에서는 약간의 변경이 있었지만'print()'지시어에는 괄호가 필요합니다. 그 외에도 그것은 매력처럼 작동합니다. 다시 한 번 감사드립니다! – demula