環境を説明しましょう。
pygtk を使用して GUI を構築しています。私のコードのある時点で、私は gtk.ScrolledWindow を作成し、それに名前を設定します (ここではコード):
top_swin = gtk.ScrolledWindow()
top_swin.set_name('script-desc-swin')
後でコードの他の部分でこのウィジェットを探す必要があるので、これを試しました:
self.gui.get_object('script-desc-swin')
self.gui は gtk.Builder オブジェクトであり、Glade で作成された XML ファイルからビルドされました。この行は None を返しているので、get_object() は GLADE ファイルで定義されたオブジェクトを探すためにしか使用できない可能性があると思います (スクロールされたウィンドウはコードでプログラムによって作成されていることに注意してください。Glade ではありません)。次に gtk.Buildable.get_internal_child() メソッドを試してみましたが、今回は最初のパラメーターが gtk.Builder であるとドキュメントに記載されているため (したがって、self.gui を渡しました)、使用に問題がありましたが、次のようになりました。
swin = gtk.Buildable.get_internal_child(self.gui, 'script-desc-swin')
TypeError: descriptor 'get_internal_child' requires a 'gtk.Buildable' object but received a 'gtk.Builder'
そこで、gtk.Builder のメソッドであるかのように get_internal_child を呼び出してみました (最初にドキュメントを確認し、gtk.Builder が gtk.Buildable を実装していないことに気付きましたが、とにかく試してみました):
swin = self.gui.get_internal_child('script-desc-swin')
AttributeError: 'gtk.Builder' object has no attribute 'get_internal_child'
もちろん、gtk.Builder (self.gui) は gtk.Buildable を実装していないと言ったので、これはわかります。
この混乱の後、スクロールされたウィンドウ (または他のウィジェット) を探す方法がわからないので、XML ファイルで指定された (つまり、Glade で作成された) ウィジェットを探してから、その子/子を取得し、このプロセスを繰り返します。これは「OMFG! WHAT A CRAPPY CODE!」のようなものです。私のアプリケーションが実行されていても、私は本当にその醜いコードを変更したいと思っています:
box = self.gui.get_object('MAIN_VIEW_BOX')
hpaned = box.get_children()[1]
hpaned2 = hpaned.get_child2()
swin = hpaned2.get_child1()
2 番目の子として別の hpaned を含む hpaned を含むボックス THE SCROLLED WINDOW.
答えは非常に簡単になるとほぼ確信しています... :-s
感謝!