2016-08-14 9 views
13

मैंने ग्लैड, पायथन और जीटीके 3 पुस्तकालयों के साथ एक जीयूआई बनाना शुरू किया। मैं अपने जीयूआई में एक कंटेनर के अंदर जोड़ने वाली बाहरी विंडो को देखने का प्रयास करना चाहता हूं। क्या यह संभव है? ऐसा करने के लिए सबसे अच्छा कंटेनर ऑब्जेक्ट कौन सा है?जीयूआई में बाहरी विंडो को कैसे एम्बेड करें (पायथन + ग्लैड + जीटीके 3)

मैंने खोजना शुरू किया लेकिन जीटीके 2 (here) में आसान तरीकों का उपयोग जीटीके 3 में और नहीं किया जा सकता है।

मुझे एक बहुत ही रोचक पोस्ट here मिला जो मुझे लक्ष्य विंडो की सही आईडी सेट करने की अनुमति देता है लेकिन मैं अभी भी अपने जीयूआई के अंदर इसे दिखाने के तरीके पर उलझन में हूं।

मैंने कैरियो के साथ थोड़ा these tutorials बदलने की कोशिश की।

अब तक मेरा कोड का टुकड़ा (मैं id_area कंटेनर में आईडी = 0x360000b के साथ विंडो प्रदर्शित करना चाहता हूं और मुझे "स्वयं" हैंडल संरचना का उपयोग करना होगा)। अस्थायी रूप से map_area कंटेनर एक Drawingarea है।

# if condition occurs  
    Gdk.Window.process_all_updates() 
    win_id = 0x360000b # from xwininfo command 
    root_win = GdkX11.X11Display.get_default() 
    win = GdkX11.X11Window.foreign_new_for_display(root_win, win_id) 
    width = win.get_width() 
    height = win.get_height() 
    self.map_area = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)    
    pixbuf = Gdk.pixbuf_get_from_window(win, 0, 0, width, height) 
    cr = cairo.Context(self.map_area) 
    Gdk.cairo_set_source_pixbuf(cr, pixbuf, 0, 0) 
    cr.paint() 

क्या कोई मेरी मदद कर सकता है? अग्रिम धन्यवाद!

+0

https://developer.gnome.org/gtk3/stable/GtkSocket.html पर एक नज़र डालें - इस समाधान को अन्य प्रक्रिया से कुछ सहयोग की आवश्यकता है। – Phillip

+0

क्या यह ** बाहरी ** प्रक्रिया को एम्बेड करने के लिए भी काम कर सकता है? मुझे अपनी स्क्रिप्ट में विजेट के रूप में जेनरेट की गई विंडो में दिलचस्पी है। ऐसा हो सकता है कि मैं अपनी gtk मुख्य विंडो – marcoresk

+1

के अंदर उचित विजेट में उबंटू टर्मिनल विंडो या वर्तमान मोज़िला फ़ायरफ़ॉक्स ब्राउज़र विंडो को एम्बेड करना चाहता हूं (मुझे नहीं पता कि यह कौन हो सकता है) निश्चित रूप से, दस्तावेज का मतलब है "अन्य" प्रक्रिया। * लेकिन * बाहरी प्रक्रिया को आपके साथ सहयोग करने की आवश्यकता है; अर्थात्, इसे GtkSocket द्वारा बनाई गई विंडो में सक्रिय रूप से अपनी शीर्ष-स्तरीय विंडो को अभिभावित करना होगा। उदाहरण के लिए, xterm के लिए '-into' विकल्प है। (यदि आप Xlib को अपनी स्क्रिप्ट पर निर्भरता के रूप में जोड़ना चाहते हैं, तो आप इसे अन्य एप्लिकेशन के लिए कर सकते हैं। मैं एक उदाहरण के साथ एक उत्तर पोस्ट करूंगा।) – Phillip

उत्तर

1

ऐसा लगता है जैसे आप एक विंडो प्रबंधक बनना चाहते हैं।

Creating a window manager for Linux

या इस एक:

Building a Window Manager

गुड लक कैसे इसी प्रकार के एक विंडो प्रबंधक, लिखने के बारे में सवालों के जवाब पर एक नज़र डालें!

+0

उत्तर के लिए धन्यवाद।इस बीच, मैंने अपनी परियोजना के इस हिस्से को रोक दिया और मैं कुछ विचारों के बाद जीटीके और ग्लेड से क्यूटी-निर्माता से चले गए, लेकिन मैं निश्चित रूप से एक नज़र डालेगा! – marcoresk

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