以编程方式在 Glade 创建的 UI 中填充 GtkTreeView

问题描述 投票:0回答:1

背景

我有一个用 Ruby 编写的照片库生成器。每个照片库的配置和生成器本身都位于一个 YAML 文件中。该工具已经作为终端工具使用。现在我想为此创建一个 GUI,我选择 Gtk 作为 GUI 库。我在 Glade 中创建了粗略的 UI,并且我有 Gtk::ApplicationWindow 和 Gtk::Application 的类。当我运行 Ruby 代码时,在 Glade 中创建的 UI 确实会加载/显示。现在我对填充 GTKTreeView 有点困惑,我想用它来显示配置数据,以便用户在生成图库之前进行最后的调整。

我推送了迄今为止的代码 - https://gitlab.com/lipoqil/static-photo-gallery-builder/-/compare/master...gui

我尝试过的事情

我发现了很多C语言的例子,但那些通常不涉及类,所以这些对我来说毫无用处。

我还在 Ruby 中找到了一些示例,这些示例不使用 Glade,而是通过手动创建 Gtk 类的实例以编程方式构建整个 UI,然后自然地在变量中引用这些实例。

我发现了一些在 Python 中执行类似操作的视频,但这些只是将操作附加到按钮,因此它们不需要对 UI 中特定元素的引用。

问题

如何获取 GTKTreeView / GTKListStore 的引用以便填充它?

我想象的是我需要打电话给

.get_object('<id I've set in Glade>')
处理某事,但不知道是什么。

如果“我尝试过的内容”不清楚……我不是在寻找 C 语言的示例,也不是整个 UI 以编程方式完成的示例。

使用的工具

  • 红宝石
    ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
  • Glade
    3.40.0
    (来自 macOS 上的 Homebrew)
  • Gtk
    3.24.41
    (来自 macOS 上的 Homebrew,使用 Gtk 3,因为 Glade 与 Gtk 4 不兼容)
  • Gtk gem
    gtk3 (4.2.2)
    (来自 ruby gems
ruby gtk3 glade gtktreeview
1个回答
0
投票

我询问了 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

我会将其标记为答案,但如果有人没有提出更好的解决方案,我会不时检查这个问题;)

© www.soinside.com 2019 - 2024. All rights reserved.