2009-06-19 4 views
2

glade3의 새로운 버전에서 ruby와 glade2를 사용하여 잠시 동안 사용자 인터페이스를 디자인했습니다. libglade 대신에 xml 파일을 생성하기 위해 gtkbuilder 형식을 사용할 수 있습니다.ruby ​​glade/gtkbuilder 예제?

예가 있습니까? 나는 google를 찾았다. 그러나 나는 어떤 운도 가지지 않고 있었다!

답변

3

당신은 바로 미리 작성된 자습서의 부족에,하지만 루비 gtkbuilder의 사용은 (같은 함수 이름, 전화 주문) 파이썬 거의 동일하므로 이러한 관심의 수 있습니다 -

GTK : : 빌더 모듈 : http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ABuilder

파이썬 코드 :

import sys 
import gtk 

class TutorialTextEditor: 

    def on_window_destroy(self, widget, data=None): 
     gtk.main_quit() 

    def __init__(self): 

     builder = gtk.Builder() 
     builder.add_from_file("tutorial.xml") 

     self.window = builder.get_object("window") 
     builder.connect_signals(self)  

if __name__ == "__main__": 
    editor = TutorialTextEditor() 
    editor.window.show() 
    gtk.main() 

출처 : http://www.micahcarrick.com/01-01-2008/gtk-glade-tutorial-part-3.html

0

IT는 SA입니다 나 정말. 다음은 빈틈없는 예입니다. http://snippets.dzone.com/posts/show/5251을 적절한 방법으로 대체하면 설정됩니다.

Ruby로 작성된 IDE가 있습니다. http://github.com/danlucraft/redcar/tree/master하지만 빌더를 사용하는지 확인하기 위해 주 파일을 찾을 수 없습니다.

+0

레드 카는 그래서 모든 GTK와 관련이없는, SWT JRuby를 /의 상단에 구현된다. – Jacob

+1

그들은 전환했기 때문입니다. 내 의견을 쓰는 시점에서 관련성이있었습니다. – Vadi

6

정말 간단합니다 단지 습지와 GUI를 생성 (그리고 GtkBuilder로 저장) 다음과 루비에서 사용 :

require 'rubygems' 
require 'gtk2' 
# require 'libglade2' #you don't need this anymore 

builder = Gtk::Builder.new 
builder.add_from_file(file) 
builder.connect_signals {|handler| method(handler) } 

첫 번째 줄은 창조의 책임이 빌더 객체를 생성 Glib::Objects을 XML 정의에서 가져 와서 나중에 사용하기 위해 저장합니다 (사용자는 get_object(objname)을 빌더로 호출 할 수 있으며 objname으로 정의 된 위젯을 리턴합니다).

두 번째 줄은 실제로 인터페이스 정의를로드합니다. 여기서 file은 gtkbuilder 파일의 경로입니다.

세 번째 줄은 다소 모호합니다. connect_signals은 인터페이스에 정의한 모든 신호에 대해 한 번 제공된 블록을 호출합니다. handler은 단지 문자열 (신호의 이름)입니다. 블록에서 proc (또는 call으로 호출 할 수있는 모든 것)을 반환해야합니다 : handler에 정의 된 신호가 발생할 때마다 해당 블록이 호출됩니다. 이 예제에서 블록은 신호와 동일한 이름을 가진 메소드를 반환하고있다 (간단히하기 위해 인터페이스에 정의 된 모든 신호에 대해 메소드가 있다고 가정한다).

3

또 다른 작업 버전은 객체 지향 형태 :

require 'gtk2' 

class Builder < Gtk::Builder 

def initialize xml 
     super() 

     self.add_from_string(xml) 

    self['main'].set_window_position Gtk::Window::POS_CENTER 
     self['main'].signal_connect('destroy') { Gtk.main_quit } 
     self['main'].show_all 

    self.connect_signals{ |handler| method(handler) } 

end 

def on_button_clicked w 

    case w.label 
      when 'quit' 
       Gtk::main_quit 
      else 
       puts "# on_button_clicked : " + w.label 

    end 
    end 

def on_main_destroy 
     puts "# on_main_destroy" 
     Gtk::main_quit 
    end 
end 

if __FILE__ == $0 

xml = <<EOI 
<?xml version="1.0" encoding="UTF-8"?> 
<interface> 
    <object class="GtkWindow" id="main"> 
    <property name="can_focus">False</property> 
    <child> 
     <object class="GtkButton" id="quit"> 
     <property name="label">quit</property> 
     <signal name="clicked" handler="on_button_clicked" swapped="no"/> 
     </object> 
    </child> 
    </object> 
</interface> 
EOI 


    Gtk.init 
     builder = Builder.new(xml) 
    Gtk.main 

end