2012-02-13 4 views
2

私はPythonとPyGTKの単純なビデオプレーヤーで、VLCをプレーヤーバックエンドとして使用しています。 gtk.DrawingAreaにビデオ画像を表示したいので、Linuxではbuilder.get_object( 'drawingarea1')。window.xidを使ってDrawingAreaウィジェットのXIDを取得します。 Windowsでは、ドキュメントによると、builder.get_object( 'drawingarea1').window.handleを使用する必要がありますが、ビデオファイルを再生すると、gtkだけでなく、ウィンドウ全体で再生されます。 DrawingArea。私は何が起きているのかを見つけるために掘り起こし始めました。builder.get_object( 'mainWindow')から取得した番号が見つかりました。window.handlebuilder.get_object( 'drawingarea1')と同じです。window.handleこれは、ウィジェットのハンドラを取得する正しい方法ですか、または私は何か間違っていますか?Windowsでgtk.gdk.window.handleを取得する

+0

ちょうどいいですが、描画領域をGtkEventBoxに配置してみてください。 –

答えて

2

例がなくても何をしているのか分かりませんが、少し質問をしたところ、この質問と可能な回答が見つかりましたhttp://python.6.n6.nabble.com/gtk-DrawingArea-handle-id-on-win32-bug-td1943074.html。そして一例が添付されました。彼が提供するリンクhttp://library.gnome.org/devel/gtk/2.18/gtk-migrating-ClientSideWindows.htmlはもう存在しませんが、更新されたリンクhttp://developer.gnome.org/gtk/2.24/gtk-migrating-ClientSideWindows.htmlが見つかりました。基本的にあなたが

drawingarea.window.handle 

は、描画領域の正しいネイティブハンドルを返す属性作るために

drawingarea.window.ensure_native() 

を呼び出す必要がありそうです

Linuxの

drawingarea.window.xid 

が自動的に呼び出して属性を取得

drawingarea.window.ensure_native() 

しかし

drawingarea.window.handle 

あなたのためにこれを行いません。

こちらがお役に立てば幸いです。

+0

ありがとう、これは私のために働いた。また、私は別の問題を抱えています:もし私がプレーヤーのウィンドウを隠して、それを再び表示すると(それは "シストレーに隠れる"機能です)、gtk.Drawingareaを破壊して再作成するまで、ビデオは決して再び表示されません。ここで何が問題になるのでしょうか? – ov1d1u

+0

正直言って、私は知らない。再度drawingarea.window.ensure_native()を呼び出してみましたか?それは私が考えることができるすべてです。ハンドルが隠されているときにハンドルが破棄されることもあるので、確実にensure_native()を呼び出した後にハンドルが同じかどうかを確認して、ハンドルポインターが正しいハンドルポインターであることを確認する必要があります。ちょうど教育された推測。私が言ったことがうまくいくかどうか教えてください。 –

+0

ビデオウィンドウを隠す前後でハンドルIDが変わらないようです。確実にensure_native()を呼び出すことは役に立ちませんでした。私はVLCのフォーラムで尋ねました、そして、彼らはこれがGTKの問題だと言っています。だから私はこれに満足していなければならないと思います。 – ov1d1u

関連する問題