2011-07-27 22 views
6

मैं संस्करण 3 में खो रहा हूँ .. को Python2 + gdk2 में है: xd से 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) 

Xlib मुझे मार रहा है .. मैं इसके साथ कुछ भी कर पाने में असमर्थ हूँ। क्या किसी ने इससे पहले काम किया है ??

प्रलेखन मैं कई बार के माध्यम से किया है पहले से ही है: Gdk3, Xlib

अपने XID से खिड़की हो रही है सबसे तेज़ तरीका को Python2 में एक स्क्रीनशॉट मुझे लगता है मैं में एक और तरीका कोशिश करनी होगी मिल गया था python3 .. कोई विचार? शायद रूट खिड़की से peek_children ?? लेकिन फिर, मुझे कैसे पता चलेगा कि यह खिड़की है या नहीं?

उत्तर

9

एक्स 11 में WindowXID जैसा ही है। एक से दूसरे तक सिर्फ एक टाइपिफ है।

तो सी कोड 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

बहुत बढ़िया! बहुत बहुत धन्यवाद। जब मैंने पहली बार कोशिश की तो मुझे लगता है कि उन्होंने अभी तक इसे लागू नहीं किया है .. हालांकि Python3 के लिए सिर्फ एक मामूली परिवर्तन, 'प्रिंट()' निर्देश अब कोष्ठक की आवश्यकता है। इसके अलावा यह एक आकर्षण की तरह काम करता है। एक बार फिर धन्यवाद! – demula

संबंधित मुद्दे