Glade で作成された UI にプログラムで GtkTreeView を設定する

概要

Rubyで書かれたフォトギャラリージェネレーターがあります。各フォト ギャラリーの構成とジェネレーター自体は両方とも 1 つの YAML ファイル内にあります。このツールはすでに端末ツールとして機能しています。ここで、これ用の GUI を作成したいと思い、GUI ライブラリとして Gtk を選択しました。 Glade で大まかな UI を作成し、Gtk::ApplicationWindow と Gtk::Application の両方のクラスを用意しました。 Ruby コードを実行すると、Glade で作成された UI が実際に読み込まれ、表示されます。現在、GTKTreeView の設定で少し行き詰まっています。ギャラリーを生成する前にユーザーが最後の調整を行うために構成データを表示するために使用したいと考えています。

これまでに持っているコードをプッシュしました — https://gitlab.com/lipoqil/static-photo-gallery-builder/-/compare/master…gui

C の例はたくさん見つかりましたが、それらは通常クラスを扱っていないため、私にとっては役に立ちません。

また、Glade を使用せず、Gtk クラスのインスタンスを手動で作成することで UI 全体をプログラム的に構築している Ruby の例も見つかりました。当然、それらのインスタンスは変数に参照を持っています。

Python で同様のことを行っているビデオをいくつか見つけましたが、それらはボタンにアクションをアタッチしているだけなので、UI の特定の要素への参照は必要ありませんでした。

GTKTreeView / GTKListStore への参照を取得してデータを入力するにはどうすればよいですか?

私が想像しているのは、何かに対して .get_object(‘’) を呼び出す必要があるということですが、それが何なのかはわかりません。

「私が試したこと」からは明らかでない場合に備えて…C の例や、UI 全体がプログラムで実行される例を探しているわけではありません。

解決策

ChatGPT 4 に質問したところ、有効な答えが得られました。

私が探していたのはおそらく、bind_template_child でした。 Glade ビューから ID を指定すると、ウィンドウ クラスの初期化後にインスタンス変数になります。

module StaticPhotoGalleryGenerator
  module GUI
    class ApplicationWindow < Gtk::ApplicationWindow
      type_register

      class << self
       
        def init
          # Set the template from the resources binary
          set_template resource: '/cz/rooland/static-photo-gallery-generator/ui/application_window.glade'
          bind_template_child('config_store1')
          bind_template_child('generate_button')
        end
      end

      def initialize(application)
        super application: application

        puts @config_store1.inspect # #<Gtk::ListStore:0x00000001437d1998 ptr=0x0000600000de20b0>
      end
    end
  end
end

これを回答としてマークしますが、人間がより良い解決策を思い浮かばなかった場合は、この質問を時々確認します ;)