2016-08-14 62 views
13

我開始建立格萊德,Python和Gtk3庫的GUI。 我想嘗試查看一個外部窗口,將其鏈接到我的GUI中的一個容器中。可能嗎?哪個是最好的容器對象?如何嵌入GUI對外窗口(Python的+格萊德+ Gtk3)

我開始搜索,但在Gtk2中的簡單方法(如here)無法在Gtk3中再使用。

我發現了一個非常有趣的帖子here,它允許我設置目標窗口的正確ID,但我仍然對如何在GUI中顯示它感到困惑。

我unsucessfully試圖改變一點these tutorials與開羅。

我的一段代碼到目前爲止(我想顯示與所述map_area容器ID = 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主窗口中嵌入Ubuntu終端窗口或當前的Mozilla Firefox瀏覽器窗口到一個適當的窗口小部件中(我不知道它是哪個) – marcoresk

+1

當然,這就是文檔所指的「其他」處理。 *但外部流程需要與您的合作;即它必須主動將其頂層窗口重新設置爲由GtkSocket創建的窗口。例如,xterm爲此提供了'-into'選項。 (如果您願意將Xlib作爲依賴項添加到您的腳本中,您可以爲其他應用程序執行此操作,我將以示例的形式發佈答案。) – Phillip

回答

1

這聽起來像你想成爲一個窗口管理器。看一看在回答有關如何編寫一個窗口管理器,像這樣的一個問題:

Creating a window manager for Linux

或者這一個:

Building a Window Manager

祝你好運!

+0

謝謝你的回答。與此同時,我停止了我的項目的這部分工作,經過一些考慮,我從GTK和Glade移到了Qt-creator,但我會確保一切! – marcoresk