Пример ruby glade3/gtkbuilder
Я пытаюсь использовать glade3 с Ruby, но, к сожалению, примеров этого мало и далеко. Глядя на то, что доступно, я придумал следующий код, но все еще чего-то не хватает, так как окно не отображается. Кажется, что нет никакого метода GtkBuilder 'show', поэтому я не уверен, что нужно, чтобы он появился. Кто-нибудь знает, что мне нужно сделать, чтобы сделать эту работу?
"hello.xml" - это довольно простой XML-файл glade3 с GtkWindow и кнопкой.
#!/usr/bin/env ruby
require 'rubygems'
require 'gtk2'
class HelloGlade
attr :glade
def initialize
if __FILE__ == $0
Gtk.init
builder = Gtk::Builder::new
builder.add_from_file("hello.xml")
builder.connect_signals{ |handler| method(handler) } # (I don't have any handlers yet, but I will have eventually)
Gtk.main()
end
end
def gtk_main_quit
puts "Gtk.main_quit"
Gtk.main_quit()
end
end
hello = HelloGlade.new
hello.xml:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
</object>
</child>
</object>
</interface>
(редактировать)
Тьфу, это всегда так. Отправьте вопрос, и я сам найду ответ. Мне нужно было получить объект window1 из GtkBuilder и вызвать его метод show():
...
window = builder.get_object("window1")
window.show()
Gtk.main
1 ответ
Эту программу было бы намного проще написать, если бы вы использовали visualruby. Вот как будет выглядеть ваш код:
class HelloGlade
include GladeGUI
def initialize
load_glade(__FILE__)
show_window()
end
end
Вам не нужно устанавливать свойство visible или писать код для закрытия окна или подключать сигналы. Все делается автоматически. Здесь есть множество примеров: