2011-10-07 52 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