You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Glade创建的UI中通过代码填充GtkTreeView?

解决Ruby Gtk3 + Glade获取TreeView/ListStore引用的问题

核心逻辑

用Glade创建的UI加载后,所有控件由Gtk::Builder对象管理,你需要在这个对象上调用get_object('<控件ID>')来获取目标控件的引用。

具体实现示例

假设你的Glade文件名为gallery_ui.glade,其中TreeView的ID设为gallery_config_treeview,ListStore的ID设为gallery_config_liststore,Ruby代码可按以下方式编写:

require 'gtk3'

class GalleryApp < Gtk::Application
  def initialize
    super('com.example.galleryapp', :flags_none)
    signal_connect 'activate' do |app|
      build_ui(app)
    end
  end

  private

  def build_ui(app)
    # 加载Glade文件到Builder实例
    builder = Gtk::Builder.new(file: 'gallery_ui.glade')
    # 获取主窗口并关联到应用
    window = builder.get_object('main_window')
    window.application = app

    # 从Builder中获取TreeView和ListStore的引用
    @tree_view = builder.get_object('gallery_config_treeview')
    @list_store = builder.get_object('gallery_config_liststore')

    # 调用方法填充配置数据
    populate_config_data

    window.show_all
  end

  def populate_config_data
    # 示例:向ListStore添加配置项(假设ListStore包含名称、值两列)
    @list_store.append.set_values('画廊标题', '我的旅行相册')
    @list_store.append.set_values('图片目录', '~/photos/trip')
    @list_store.append.set_values('每页展示数量', '12')
  end
end

GalleryApp.new.run

关键注意事项

  • 必须在Glade中给目标控件设置唯一ID(在控件的「General」标签页的「ID」字段配置),否则get_object会返回nil。
  • 确保Glade中TreeView已正确绑定对应的ListStore(在TreeView的「Model」属性选择你创建的ListStore),这样获取到的ListStore才能和TreeView关联生效。
  • 无论控件嵌套在Box、Notebook等容器中,都可以直接通过ID从Builder获取,无需额外路径。

内容的提问来源于stack exchange,提问作者Mailo Světel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:55:05