私は ruby と grade2 を使用してユーザー インターフェイスを設計していましたが、新しいバージョンの glade3 では、libglade の代わりに gtkbuilder 形式を使用して xml ファイルを生成できます。
例はありますか?私はグーグルで検索しましたが、運がありませんでした!
私は ruby と grade2 を使用してユーザー インターフェイスを設計していましたが、新しいバージョンの glade3 では、libglade の代わりに gtkbuilder 形式を使用して xml ファイルを生成できます。
例はありますか?私はグーグルで検索しましたが、運がありませんでした!
それは本当に簡単です: Glade で GUI を作成し (そしてそれを GtkBuilder として保存)、それを ruby で次のように使用します:
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) }
最初の行は Builder オブジェクトを作成します。このオブジェクトは、Glib::Objects
xml 定義から を作成し、後で使用するために保存します (get_object(objname)
ビルダーを呼び出すと、 で定義されたウィジェットが返されますobjname
)。
2 行目は実際にインターフェース定義をロードします。ここで、file
は gtkbuilder ファイルへのパスです。
3 行目はやや不明瞭です。connect_signals
インターフェースで定義したシグナルごとに、指定されたブロックを 1 回呼び出します。handler
単なる文字列 (シグナルの名前) です。ブロックからproc (または で呼び出し可能なもの) を返すことになっていcall
ます。そのブロックは、によって定義されたシグナルが発生するたびに呼び出されますhandler
。この例では、ブロックは信号と同じ名前のメソッドを返しているだけです (簡単にするために、インターフェイスで定義された信号ごとにメソッドがあると仮定しています)。
事前に作成されたチュートリアルがないことは確かですが、Ruby での gtkbuilder の使用法は Python とほぼ同じ (同じ関数名、呼び出し順序) であるため、これらは興味深いものになる可能性があります -
GTK::Builder モジュール: 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
オブジェクト指向形式の別の作業バージョン:
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
本当に同じです。空き地の例を次に示します。http://snippets.dzone.com/posts/show/5251適切なメソッドに置き換えれば、設定は完了です。
Rubyで書かれたIDEがあります:http://github.com/danlucraft/redcar/tree/masterですが、ビルダーを使用しているかどうかを確認するために、最初にメインファイルを見つけることができませんでした。