2011-07-27 41 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

相關問題