我開始建立格萊德,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()
任何人都可以幫助我嗎? 提前謝謝!
看一看https://developer.gnome.org/gtk3/stable/GtkSocket.html - 這種解決方案需要從其他過程中的一些合作,但。 – Phillip
即使嵌入**外部**過程,它可以工作嗎?我對在腳本中沒有生成的窗口感興趣。這可能就像我想要在我的gtk主窗口中嵌入Ubuntu終端窗口或當前的Mozilla Firefox瀏覽器窗口到一個適當的窗口小部件中(我不知道它是哪個) – marcoresk
當然,這就是文檔所指的「其他」處理。 *但外部流程需要與您的合作;即它必須主動將其頂層窗口重新設置爲由GtkSocket創建的窗口。例如,xterm爲此提供了'-into'選項。 (如果您願意將Xlib作爲依賴項添加到您的腳本中,您可以爲其他應用程序執行此操作,我將以示例的形式發佈答案。) – Phillip