Mono」タグアーカイブ

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!

IronEditor

IronEditor なるものを見つけた。
なんか mono でも動くらしいから試してみよう。

irb

あらら、IronPython も IronRuby も同梱なのね。
IronPython 2 系は以前 mono で試して動かなかった経験があるんだけど。

ipy

動くじゃん、ビルド方法が違うのかな?
てゆーか 1.1 もそうだけど文字色を変更するのをやめてくれないか。
まあいいや、IronEditor を起動してみる。

なんじゃこりゃ…

勝手に最大化で起動する大迷惑なことをしてくれる、何時のアプリじゃい!
mono が悪いのだろうけど一度最小化しないとウインドウ化できない。

てゆーかコレってもしかしなくても WindowsForm だよな。
せめて Gtk# にしてくれ、XP で .NET より更にレスポンスが悪いんだよ!
mono ではボタンを押してもヘコまないわ異様に待たされるわ、という現実を知ってくれよ。
少し使うと急にキーボードを受け付けなくなるし、Opera なんか可愛いレベルで。

やっぱり mono は駄目だ、JAVA と何も変わらないというか WindowsForm は Swing 以下だ。
それでもせめて Windows で使えるようなアプリなら使ってみようと思うんだが…

ironeditor

おいおい、if __name__ == “__main__”: を入れたら動かないよ!
__main__ を本体で実効しているの?これじゃ何も作れないんですけど。
Tab キーも Tab しか入れられない、日本語を打つと2つ流し込まれる。

そんな基本的な事はこれだけどエディタヲタの大好きな色分けや自動インデントはある。
なんというか…まあそんな感じであった。

でも Ubuntu 9.04 でそのまま動かせる IronPython 2.0 が手に入ったので収穫はあったぞと。
使うかどうかは今後どうなるかだが、Gtk# で可能なことは PyGtk で全部可能かつ早いしなぁ。

Enjoy!

Ubuntu 9.04 そのさん

さて Ubuntu 9.04 をインストールいたしました、更に続き。

何か忘れているなぁ?と思いながら Y901x の開発再開をしようとする。

…Glade をインストールしてねぇ!

ということで毎度のように追加と削除から。
あれ?こんなにサイズがデカかったかな…落とすのにえらく時間が掛かるような。
とにかくインストール完了した時点でバージョン確認のために起動。

ちょー!メチャメチャ変わっている!!!

glade_a

v3.4.5 → v3.6.1 なんだがマイナーチェンジに見えないわ。
一応今までに作った y901window.glade は開けるが古さを感じてしまった。
GtkBuilder と Libglade が選択できるのは解っていたが進化が早すぎ、、、、、

GtkBuilder 形式って GtkListStore や GtkTextBuffer も含められるのか。
View と Data をまとめようってこと?それ WPF と真逆だと思うんですけど。
なんかいっぱいウイジェットが増えているし、ガンマ曲線とかって何よ?

他やれることが至れり尽くせりに、旧バージョンはいったいなんだったの。
「展張」とか意味不明すぎる日本語訳はそのままだけど。

せっかくだから UI Mnager を使いたいが使い方がイマイチ解らない。
ググるも見当たらず、又自分で弄くり回して覚書を作るしかないか。
あぁせっかく書いた PyGtk+Glade 覚書は早くも過去の遺物になった。

同時に入る DevHelp もボリュームたっぷりに進化。
Evolution や Totem の Core API まで解説とは…サイズがデカいわけだ。
そうそう、何故か巨大だった文字サイズは普通になった。

devhelp1

Glade 関連だけで長くなりそうなので以後まとめページを作るとして。
開発繋がりで MonoDevelop を少し試してみます。

前回書いたとおり 9.04 では MonoDevelop のみインストールすれば全部揃う。
早速 C# 3.0 仕様に対応しているか簡単に試してみます。

using System;

namespace hello
{
    class Cls
    {
        public string s{get; set;}
        public void write(string t)
        {
            Console.WriteLine(t + s);
        }
    }

    delegate string Delgt(string t, string u);

    /// <summary>
    /// エントリポイント
    /// </summary>
    class MainClass
    {
        private static void DTest(string t, string u, Delgt d)
        {
            Console.WriteLine( d(t, u) );
        }

        public static void Main(string[] args)
        {
            // var が使えるか test
            var s = "あいうえお";
            Console.WriteLine("{0}_かきくけこ", s);

            // 省略プロパティ test
            var ss = new Cls();
            ss.s = "たちつてと";
            ss.write("さしすせそ_");

            // 匿名メソッド test
            DTest("匿名メソッド", "の出力", delegate(string t, string u) {return t+u;});

            // ラムダ式 test
            DTest("の出力", "ラムダ式", (t, u) => u+t);
        }
    }
}

mono_hello

おぉ動く動く。
他人が読みにくいコードを書いて悦に浸りたいなら C# は最強だね。

MonoDevelop の全置換って Tab の正規表現 \t が使えないんですけどぉ、、、、、
gEdit で置換しました。

ん?標準で作成するソースに utf-8 の BOM が付かなくなった。
IDE からソース追加すると元々付かなかったんだが、無しに統一かな。
MSBuild 形式になった sln ファイルには付いている。

bom

Visual Studio は全ファイルに BOM を付けているはずなんだけーが。
てか sln だけ改行が CRLF だよ、ややこしいったらありゃしない。
BOM という概念は撤廃してくれよ、必要なのはもはや MS 関連のみなんだから。

コード保管は随分賢くなったなぁ、リファクタリングはさすがにまだ無いか。
これも長くなりそうなので以後まとめページを作る。

今回は「追加と削除」から手に入る最新開発環境の簡単な紹介でした。

ui_manager

EyeOfGnome – SunagaLab

Gnome 標準の「画像ビューア」も Python でプラグイン拡張ができるんだ。
知らなかった、しかし需要が恐ろしく微妙だ…
何か作ってみようと思ったけど今は全然思いつかない。

しかし同じように get_ui_manager メソッドでわりと楽に UI の取得ができるようで。
調べてみると Totem も当然のように、いや俺はコレについて書くわけには…
よく解らないんだが GtkBuilder は関係あるのかな?

GtkBuilderとGladeについてと、PyGTK上での使用について(概要) – 試験運用中なLinux備忘録

今唐突に思いついたが gEdit のタブ右メニューに「このタブ以外を閉じる」が欲しいぞ。
タブ右メニューの name は…ソースを見るしかない臭いんだが、あまりやりたくないけど。

ところで Gnome 標準なら全部こうなのかな?と思って検索したけどそうでもないや。
まあそりゃ Tomboy なんかは mono だし当然 C# になるわな。
mono やりたい人はこんなのから始めるといいかもよ。

Tomboy/HowToCreateAddins – GNOME Live!

私は Tomboy は使っていないけど…

VMware Server

VirtualBox はなんつーかもう耐えられない。
Mono を使ってプログラミングを始めたら気になる部分が我慢できなくなった。

文字入力で無意識に「半角/全角」キーを押して SCIM がチラツキしてしまう。
流石にプログラミングをやっていると意識しているつもりでも何度もやってしまう。
回避する方法も無いようだしキビシイ。

それに Linux ゲストだとマウス統合を無効にできないことが辛過ぎる。
私的には意図的にゲストを使っている状態では決してホストに戻ってはいけない。
VMware Player では当然無効にして使っていた。

つーことで、もういいかげんに専用マシンを用意したほうが良さそうだとも思うんだが…
ものは試しで VMware Server を導入してみた。

VMware Serverのダウンロード、無償のVMware、仮想サーバ – VMware

ちなみに Opera ではユーザー登録ができませんので Firefox か IE で。
インストールは下記を参考にした。

仮想サーバの構築(VMware Server: WindowsXP編)

まあインストールはすんなり終わった。
しかしなんか最初からマウス統合されていて OS 間を跨げた、何故?
どうやら 8.04 は VMware 関連のドライバが標準装備のようである。

/usr/X11/xorg.conf でマウスの設定を見るとあらかじめ vmmouse になっていた。
単なる mouse に書き換えて Ctrl+Alt+BackSpace で X の再起動!
よしよし、コレで邪魔なだけのマウス統合は無効になったぞと。

解像度はなにもしなくても沢山登録されていた。
xorg.conf には何も指定していないんだけど…よく解らない。
まあ都合がいいのでこのまま使おう。

せっかくなので 1440×900 に解像度アップ。
ツールバーとステータスバーを非表示にすれば丁度いいサイズになった、よしよし。

VMware Tools はあえてインストールしないで使う予定。

うん!「半角/全角」キーでのイライラは解消したぞと。
それと SCIM の設定を開いて

・全体設定のホットキー
・Anthy のキーバインド

から Ctrl+Space を削除しておきましょう。
Visual Studio 同様 Mono Developer のコード補完もこのキーでイケます。
消さないと横取りされてしまう、両方消さないと???になります。

あぁこれで Mono Developer によるプログラミングが快適になりそうだ。
しかしクリップボードの共有が使えなくなったのは痛いかも。