Я пытаюсь создать графический интерфейс с Glade 3 (gtk) и ruby, но не могу понять, как на самом деле динамически заполнять поле со списком, например, списком строк. Я получаю файл xml .glade после того, как визуально создаю свой графический интерфейс в Glade, и использую ruby-glade-create-template для создания моего файла .rb, но понятия не имею, куда идти дальше. Я не могу найти никаких руководств по использованию ruby с Glade 3, и любая помощь будет оценена по достоинству. Спасибо!
Как использовать/заполнить поле со списком с помощью Ruby/Glade 3
Ответы (3)
Зачем вам нужно создавать файл .rb? Генерация кода Frown Upon™. Итак, вы загружаете файл поляны с помощью Gtk::Builder. пример? Получив объект Builder, вы вызываете метод get_object. чтобы получить определенные виджеты.
Вот неплохой учебник по поляне 3, он не распространяется на Ruby, но достаточно близок к Python. Он немного устарел, поэтому некоторые ошибки, упомянутые там, были исправлены, если вы используете последнюю версию Glade 3.
def initialize_combobox_script_select()
#get combobox widget from glade file
@combobox_script_select = @glade.get_widget("combobox_script_select")
@combobox_script_select.set_active(0) #this makes <select a script> the default element in the combobox
@script_list = ["helloworld", "byeworld"]
@script_list.each{|script| @combobox_script_select.append_text("#{script}")} #populate the combobox with the list of scripts
end
Это пример кода для инициализации поля со списком, который я использовал для заполнения именами скриптов.
Если вы использовали VisualRuby, вы можете создать поле со списком следующим образом:
combo = VR::SimpleComboBoxEntry("Selected", "Option1", "option2", "Option3")
@builder["vbox1"].add(combo)
По какой-то причине Glade не работает с простыми выпадающими списками. Когда вы выбираете простой текстовый тип, он не сохраняется должным образом в XML-файле. Итак, что вам нужно сделать, это поместить VBox или HBox с 1 ячейкой в форму поляны, куда вы хотите, чтобы поле со списком помещалось, и добавить вышеупомянутое поле в VBox. В приведенном выше примере @builder является экземпляром Gtk::Builder.
Есть еще примеры по адресу: