2016-08-14 9 views
13

Glade、Python、Gtk3ライブラリを使ってGUIを構築し始めました。 私はGUIの中でそれをコンテナ内でリンクする外部ウィンドウを見たいと思っています。出来ますか?これを行うための最良のコンテナオブジェクトはどれですか?GUIに外部ウィンドウを埋め込む方法(Python + Glade + Gtk3)

私は検索を開始しましたが、Gtk2の簡単なメソッド(hereなど)をGtk3で使用することはできません。

ターゲットウィンドウの正しいIDを設定することができる非常に興味深いポストhereが見つかりましたが、私はそれを自分のGUI内に表示する方法についてはまだ混乱しています。

カイロでthese tutorialsのビットを変更しようとしましたが、うまくいきませんでした。

これまでのコードはmap_areaコンテナにID = 0x360000bのウィンドウを表示したいので、 "self。"構造体を使用する必要があります。一時的に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

か、この1:

Building a Window Manager

幸運!

+0

ありがとうございました。その間、私はプロジェクトのこの部分をやめ、GTKとGladeからいくつかの考慮を経てQt作成者に移りましたが、確かめてみましょう! – marcoresk

関連する問題