glade3の新しいバージョンでrubyとglade2を使ってしばらくユーザーインターフェースを設計していましたが、libgladeの代わりにgtkbuilder形式を使ってxmlファイルを生成することができます。ruby glade/gtkbuilderの例ですか?
例はありますか?私はGoogleを検索しましたが、私は運がなかった!
glade3の新しいバージョンでrubyとglade2を使ってしばらくユーザーインターフェースを設計していましたが、libgladeの代わりにgtkbuilder形式を使ってxmlファイルを生成することができます。ruby glade/gtkbuilderの例ですか?
例はありますか?私はGoogleを検索しましたが、私は運がなかった!
あなたは右の前の書かれたチュートリアルの欠如にしているが、Rubyでgtkbuilderの使用は、Pythonとほとんど同じである(同じ関数名、コールオーダー)ので、これらに関心があるかもしれない -
GTK: :ビルダーモジュール:http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ABuilder
Pythonコード:
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
それはsaです私は本当に。ここには隙間の例があります:http://snippets.dzone.com/posts/show/5251は適切な方法で代用してください。
Rubyで書かれたIDEはhttp://github.com/danlucraft/redcar/tree/masterですが、ビルダーを使用しているかどうかを確認するためのメインファイルは見つかりませんでした。
それは本当に簡単です:最初の行は、作成の責任者である、ビルダーオブジェクトを作成し
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) }
:ちょうどグレイドを使用してGUIを作成する(とGtkBuilderとして保存)し、その後にRubyでそれを使用しますGlib::Objects
をxml定義から削除し、後で使用するためにそれらを保存します(get_object(objname)
をビルダーに呼び出すと、objname
で定義されたウィジェットが返されます)。
実際には2番目の行にインターフェイス定義がロードされます。ここで、file
はgtkbuilderファイルへのパスです。
3行目はやや曖昧です。 connect_signals
は、インターフェイスで定義したすべての信号に対して1回提供されるブロックを呼び出します。 handler
は単なる文字列(シグナルの名前)です。ブロックからproc(またはcall
で呼び出し可能なもの)を返すことになっています。handler
で定義されたシグナルが発生するたびにそのブロックが呼び出されます。この例では、ブロックは信号と同じ名前のメソッドを返すだけです(簡単にするため、インターフェイスに定義されているすべての信号に対してメソッドがあると仮定しています)。
別の作業バージョンは、オブジェクト指向形式で:
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
Redcarのはそうではない全くGTKが関連する、のJRuby/SWTの上に実装されています。 – Jacob
それは彼らが切り替えたからです。私のコメントを書いている時点で、それは関係していた。 – Vadi