Программное заполнение GtkTreeView в пользовательском интерфейсе, созданном Glade

Фон

У меня есть генератор фотогалереи, написанный на Ruby. Конфигурация каждой фотогалереи и сам генератор находятся в одном YAML-файле. Этот инструмент уже работает как терминальный инструмент. Теперь я хочу создать для этого графический интерфейс и выбрал Gtk в качестве библиотеки графического интерфейса. Я создал черновой пользовательский интерфейс в Glade, и у меня есть классы как для Gtk::ApplicationWindow, так и для Gtk::Application. Когда я запускаю код Ruby, пользовательский интерфейс, созданный в Glade, действительно загружается/отображается. Теперь я немного застрял в заполнении GTKTreeView, который я хочу использовать для отображения данных конфигурации, чтобы пользователь мог внести последние изменения перед созданием галерей.

Я вставил код, который у меня есть — https://gitlab.com/lipoqil/static-photo-gallery-builder/-/compare/master...gui

Что я пробовал

Я нашел много примеров на C, но они обычно не связаны с классами, поэтому для меня они бесполезны.

Я также нашел примеры в Ruby, которые не используют Glade и создают весь пользовательский интерфейс программно, создавая вручную экземпляры классов Gtk, и, естественно, затем они имеют ссылку в переменной.

Я нашел несколько видеороликов о том, как делать что-то подобное на Python, но там просто прикреплялись действия к кнопкам, поэтому им не требовалась ссылка на конкретный элемент пользовательского интерфейса.

Вопрос

Как мне получить ссылку на GTKTreeView/GTKListStore, чтобы я мог ее заполнить?

Я представляю, что мне нужно вызвать .get_object('<id I've set in Glade>') по какому-то поводу, но понятия не имею, по какому поводу.

Если из «Что я пробовал» неясно… Я не ищу, например, C или пример, где весь пользовательский интерфейс выполнен программно.

Используемые инструменты

  • Руби ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
  • Glade 3.40.0 (из Homebrew для macOS)
  • Gtk 3.24.41 (из Homebrew на macOS, с использованием Gtk 3, поскольку Glade несовместим с Gtk 4)
  • Gtk драгоценный камень gtk3 (4.2.2) (из рубиновых драгоценных камней)
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я спросил

Вероятно, я искал bind_template_child. Вы присваиваете ему идентификатор из представления Glade, и после инициализации класса окна он становится переменной экземпляра.

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

Я отмечу это как ответ, но время от времени буду проверять этот вопрос, если человек не нашел лучшего решения;)

Рад, что у вас все заработало, и спасибо, что хотя бы написали свой ответ. Ответы ChatGPT технически запрещены для SO (Meta.stackoverflow.com/questions/421831/…), так что, возможно, просто отредактируйте эту часть ¯\_(ツ)_/¯

engineersmnky 24.04.2024 22:45

Мне кажется, запрещена только копипаста AI, потому что она раздувалась. Я поговорил с ChatGPT, а затем сам написал ответ, основываясь на коде, который я получил из этого чата. Окончательный код я тоже написал сам.

Mailo Světel 25.04.2024 17:55

Другие вопросы по теме