我尝试在Ruby中使用glade3,但不幸的是这样的例子很少。查看可用的代码,我编写了以下代码,但是仍然缺少一些东西,因为窗口没有显示。似乎没有任何GtkBuilder"show"方法,所以我不确定需要什么来使它出现。有人知道我要怎么做才能成功吗?
"hello.xml"只是一个相当简单的glade3 xml文件,带有一个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>
(编辑)啊,总是这样。发布一个问题,我自己找出答案。我需要从GtkBuilder中获取window1对象,并调用它的show()方法:
...
window = builder.get_object("window1")
window.show()
Gtk.main
如果使用visualruby,该程序编写起来会容易得多。这是你的代码应该是什么样子:
class HelloGlade
include GladeGUI
def initialize
load_glade(__FILE__)
show_window()
end
end
你不需要设置"可见"属性,或者编写代码来关闭窗口,或者连接信号。一切都是自动完成的。这里有很多例子:
http://visualruby.net