何を今頃 seed というものを知った。
Ubuntu 11.10 は後で入れないと使えないので Fedora 15 で試す。
gi の動的バインディングは色々な言語から利用できる。
海外を探せば vala とかの方法も見つかる、私は vala をやるつもりはないけど。
ようするに JavaScript なので PyGi ベースで考えると
var new 及びセミコロンが増えて JSON でパラメータを書けばいいようだ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/usr/bin/env seed Gtk = imports .gi.Gtk; Gtk.init ( null , null ); var window = new Gtk.Window(); //window.connect("delete-event", Gtk.main_quit); window.signal.hide.connect(Gtk.main_quit); var check = new Gtk.CheckButton({label: "seed check" }); //check.set_property("active", true); check.active = true ; window.add(check); window.show_all(); Gtk.main(); |
シグナルは signal メソッドから辿る、プロパティはドットでアクセス。
プロパティのハイフンはアンダースコアに変換、どの言語も同じだね。
GType でサブクラスが作れコンストラクタも利用できる。
公開メンバは var を使わず this に付加して作成する、なるほど。
GTK+ も Clutter も利用できる。
これなら PyGi と同等に扱えるかも。
ということでダイアログを出してテキストを変更するテストコードを。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #!/usr/bin/env seed Gtk = imports .gi.Gtk; SeedWindow = new GType({ parent: Gtk.Window.type, name: "SeedWindow" , init: function (){ var messagebox = function (text) { var dlg = new Gtk.MessageDialog({buttons:Gtk.ButtonsType.OK_CANCEL}); dlg.set_title( "title" ); dlg.text = "first" ; dlg.secondary_text = text; var r = dlg.run(); dlg.destroy(); return r; }; var on_clicked = function (widget){ var res = messagebox( "Message Text" ); if (res == Gtk.ResponseType.OK) { label.set_text( "OK" ); } else { label.set_text( "Cancel" ); }; }; var button = new Gtk.Button({label: "button test" }); button.signal.clicked.connect(on_clicked); var label = new Gtk.Entry(); var vbox = new Gtk.VBox(); vbox.pack_start(button); vbox.pack_start(label); this .add(vbox); this .signal.hide.connect(Gtk.main_quit); this .show_all(); } }); Gtk.init ( null , null ); var w = new SeedWindow(); Gtk.main(); |
Gtk.MessageDialog のパラメータが buttons しか適用されない…
parent や flags とかはガン無視される、なんだかよく解らない。
造り込みが甘いのか、それとも何か特殊な指定方法が必要なのか?
まあもっと情報が出ないと普段利用にはまだチト厳しいかな。
とにかく seed は JavaScript が大好きでかつ Python の文法に「なんじゃこりゃ!」とか「self いらないだろ?」とか「唖然…」とかつぶやくような Python が嫌いで嫌いでしかたがない人にはもってこいかもしれません。
私は var と new とセミコロンと中括弧が面倒くさいですw