2011-07-27 76 views
6

我失去了在3版本。在python2 + gdk2是: 如何从xid获取Gdk窗口?

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

×程序库是杀害我。我无法用它做任何事情。有没有人在之前使用它?

我经过好几次已经文档已经是: Gdk3Xlib

充分利用其XID窗口是为了获得python2截图我想我得尝试以另一种方式的最快方法python3 ..任何想法?也许peek_children从根窗口?但是,我怎么知道这是我想要的窗口?

回答

9

X11中的A WindowXID相同。只有一个typedef从一个到另一个。

所以在C代码gdk_x11_window_foreign_new_for_display()只接受WindowXID,它基本上是一个整数。这也适用于使用自省的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() 
+0

太棒了!非常感谢。当我第一次尝试这个时,我认为他们没有实现它..虽然只是python3的一个小改动,'print()'指令现在需要括号。除此之外,它就像一种魅力。再次感谢! – demula