2011-10-07 97 views
3

我正在尝试将rubde3与glade3一起使用,但不幸的是,这种情况的例子很少。看看有什么可用的,我已经提出了以下代码,但仍然缺少一些东西,因为窗口不显示。似乎没有任何GtkBuilder'show'方法,所以我不确定需要什么来显示它。有谁知道我需要做什么来完成这项工作?ruby​​ glade3/gtkbuilder示例

“hello.xml”只是一个相当简单的带有GtkWindow和按钮的glade3 xml文件。

#!/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 
+1

尝试增加'<属性名= “可见”>真''以下<对象类= “的GtkWindow” ID = “窗口1”>' – derp

回答

0

该方案将是一个更容易写,如果你使用visualruby。这是 你的代码是什么样子:

class HelloGlade 

    include GladeGUI 

    def initialize 
    load_glade(__FILE__) 
    show_window() 
    end 

end 

你不会需要设置“可见”属性,或编写代码来关闭窗口,或连接信号。一切都自动完成。这里有很多的例子:

http://visualruby.net