背景

我有一个用Ruby编写的照片库生成器.每个照片库和生成器本身的配置都在一个YML文件中.该工具已经作为终端工具使用.现在我想为此创建一个图形界面,并 Select Gtk作为图形界面库.我在Glade中创建了粗略的UI,并且我有Gtk::AppliationWindows和Gtk::应用程序的类.当我运行Ruby代码时,Glade中创建的UI确实会加载/显示.现在我有点陷入了填充GTKTreeView的困境,我想使用它来显示配置数据,以便用户在生成图库之前进行最后的调整.

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

我try 过的

我在C中发现了很多例子,但这些例子通常不处理类,所以这些对我来说没有用.

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

我发现了一些在Python中做类似事情的视频,但这些只是将操作附加到按钮,所以它们不需要引用UI中的特定元素.

问题

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

我想象的是,我需要为某件事打.get_object('<id I've set in Glade>')电话,但不知道是什么.

如果从"我try 了什么"中不清楚.我不是在寻找C中的示例或整个UI以编程方式完成的示例.

使用的工具

  • Ruby 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不兼容)
  • GtkRuby gtk3 (4.2.2)(从ruby gems开始)

推荐答案

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

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

Ruby相关问答推荐

RVM 和 OpenSSL 的问题

Ruby反斜杠在新行上继续字符串?

查看 Savon 请求 XML 而不发送到服务器

python:pythonbrew 和 virtualenv 有什么区别?

如何打开(读写)或创建允许截断的文件?

根据另一个数组的元素对数组进行排序

在包含任意数量的嵌套散列和数组的散列中查找键/值对

如何在 Ruby 中使用 (n) 诅咒?

try 学习/理解 Ruby 的 setter 和 getter 方法

Broken pipe (Errno::EPIPE)

如何在 ruby​​ rake 中明确地失败任务?

我应该如何在哈希上使用 each_with_object?

在 Rspec 测试中运行 Rake 任务

Ruby 数组中的奇数(或偶数)条目

rbenv、rvm 和 chruby 有什么区别?

是什么让 Ruby 变慢了?

如何将多个元素添加到数组中?

如何在没有 RVM 的 Ubuntu 上安装 Ruby 2

通过 factory_girl 协会查找或创建记录

如何将 270921sec 转换为天 + 小时 + 分钟 + 秒? (Ruby)