IronPython in Gtk #

Ubuntu 9.04 で IronPython が動かせるので Gtk# を試してみる。

Mono, Gtk# and ironpython | Kushal , kD & FOSS

まぁ他国ならこんな簡単に見つけることができるんだが。
私がよく書くコードと同様にするなら class を作って

#-*- 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()

mono_ipy1

こんな感じかな。
Gtk.Application.Init() によるライブラリ初期化は必須のようで。
__init__() にはタイトル文字列を入れないと通らない、もっと柔軟にしてくれよ。
親 class の __init__() はやっぱり不要、まぁ Windows 版と同じ exe だし。
pack_start のパラメータは一つか全部しか選べない、PyGtk ならデフォルト引数があるのに。
ShowAll() しないとウインドウを表示できませんので気をつけて。

後は…見ての通り PyGtk とほとんど変わらない。
が、どうしても気になる GtkTextView からの GtkTextBuffer 取得方法。

self.textview.GetBuffer().SetText("Hello World!")

なら解るんだがこんな関数はない。
ついでにメソッドは全部小文字に統一されている GTK+ を何故かキャメルケース化している。
DevHelp が役に立たないような GTK+ バインディングはどうなんだと思うんですけど。

ところで何故 Latin-1 ?って UTF-8 に書き換えてみてよ。

mono_ipy2

意味ワカンネ、つまり未対応ってことかな。
これじゃリテラルに日本語が使えないわな、方法模索中。

つーかやっぱり文字が見にくいのでコレ用に bash のプロファイルを作るはめになったぞと。

Enjoy!