Ubuntu 9.04 で IronPython が動かせるので Gtk# を試してみる。
Mono, Gtk# and ironpython | Kushal , kD & FOSS
まぁ他国ならこんな簡単に見つけることができるんだが。
私がよく書くコードと同様にするなら class を作って
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 41 42 43 44 45 46 47 48 49 50 51 52 | #-*- coding:Latin-1 -*- """ Error #-*- coding:utf-8 -*- """ import clr clr.AddReference( 'gtk-sharp' ) import System import Gtk class GtkSharpWindow(Gtk.Window): """ GtkSharp Test """ def __init__( self , title): """ Gtk.Window.__init__(self) is No Constructor has been """ # GtkButton button = Gtk.Button( "Click!" ) button.Clicked + = self .on_button_clicked # GtkTextView self .textview = Gtk.TextView() # Packing vbox = Gtk.VBox() vbox.PackStart(button, False , False , 0 ) vbox.PackStart( self .textview) self .Add(vbox) # self self .DeleteEvent + = self .delete_event self .Resize( 320 , 100 ) self .ShowAll() def delete_event( self , sender, e): """ Required """ Gtk.Application.Quit() def on_button_clicked( self , sender, e): """ Button Click Signal Handrer """ self .textview.Buffer.SetText( "Hello World!" ) if __name__ = = "__main__" : Gtk.Application.Init() w = GtkSharpWindow( "TitleBar" ) Gtk.Application.Run() |
こんな感じかな。
Gtk.Application.Init() によるライブラリ初期化は必須のようで。
__init__() にはタイトル文字列を入れないと通らない、もっと柔軟にしてくれよ。
親 class の __init__() はやっぱり不要、まぁ Windows 版と同じ exe だし。
pack_start のパラメータは一つか全部しか選べない、PyGtk ならデフォルト引数があるのに。
ShowAll() しないとウインドウを表示できませんので気をつけて。
後は…見ての通り PyGtk とほとんど変わらない。
が、どうしても気になる GtkTextView からの GtkTextBuffer 取得方法。
1 | self .textview.GetBuffer().SetText( "Hello World!" ) |
なら解るんだがこんな関数はない。
ついでにメソッドは全部小文字に統一されている GTK+ を何故かキャメルケース化している。
DevHelp が役に立たないような GTK+ バインディングはどうなんだと思うんですけど。
ところで何故 Latin-1 ?って UTF-8 に書き換えてみてよ。
意味ワカンネ、つまり未対応ってことかな。
これじゃリテラルに日本語が使えないわな、方法模索中。
つーかやっぱり文字が見にくいのでコレ用に bash のプロファイルを作るはめになったぞと。
Enjoy!