何を今頃 seed というものを知った。
Ubuntu 11.10 は後で入れないと使えないので Fedora 15 で試す。
gi の動的バインディングは色々な言語から利用できる。
海外を探せば vala とかの方法も見つかる、私は vala をやるつもりはないけど。
ようするに JavaScript なので PyGi ベースで考えると
var new 及びセミコロンが増えて JSON でパラメータを書けばいいようだ。
#!/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 と同等に扱えるかも。
ということでダイアログを出してテキストを変更するテストコードを。
#!/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