如何在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
相关产品推荐
相关产品推荐

