Gtk#

Gtk# とやらで Linux の GUI 作りを試してみる。
実体は思いっきりというか単なる Gtk+ のラッパーらしいんだが…

とりあえず Gtk# 2.0 プロジェクトを新規で作成する。
static void Main だけの雛形コードが作成された。
そのままビルドすればとりあえずウインドは表示されるようである。

とりあえずボタンを押すとメッセージを表示する初心者アプリでも。
色々探したが情報少なすぎ、見つけたコードを色々試してみる。

Gtk.MessageDialog 関数を使えばいいようだとまでは解ったのだが…
一番迷ったのは引数の一番最初に指定する Gtk.Window をどう指定するか。
それ以外はコード補完機能のおかげでなんとなく解ったがココでどうしても詰まる。

後で解ったんだけどメインの class では static メソッドは Main 一つにすべし!

GtkSharp – Mono

ココのスクリーンショットを見ると RAD での GUI デザインできそうなんだが…
方法が解らない、情報が全く見つからない、まあコードでなんとかしよう。

CodeProject: A google search application using Gtk#. Free source code and programming help

Glade なんてのがあるんだ。
「追加と削除」から Glade3 をインストール。
でもよく解らない…今回は下の方にあるコードを見てなんか作ってみよう。

using System;
using Gtk;
//using Glade; //後で

namespace gtkApp2
{
    class Test
    {
        private Window win;

        public static void Main (string[] args)
        {
            new Test(args);
        }
        public Test(string[] args)
        {
            Application.Init();
            win = new MainWindow();
            win.DeleteEvent += new DeleteEventHandler(win_DeleteEvent);
            Button btn = new Button();
            btn.Label = "水色の";
            btn.Clicked += new EventHandler(btn_Clicked);
            win.Add(btn);
            win.Show ();
            btn.Show();
            Application.Run ();
        }
        private void win_DeleteEvent(object o, DeleteEventArgs args)
        {
            Application.Quit();
            args.RetVal = true;
        }
        private void btn_Clicked(object sender, EventArgs e)
        {
            MessageDialog dlg = new MessageDialog(
                          this.win,
                          Gtk.DialogFlags.Modal,
                          Gtk.MessageType.Info,
                          Gtk.ButtonsType.Ok,
                          "セーラー服");
            dlg.Run();
            dlg.Destroy();
        }
    }
}

で、ウインドサイズに広がったボタンを押すとメッセージダイアログが出る。
というしょーもないアプリを作るのに三日も使った情けないプログラマーであった。

Gtk ってレイアウトという概念があるんだね。
ボタンがウインドサイズになった時に思わず「おまえは WPF か!」と思ったけど
よく考えたら Java にもレイアウタがあったっけか。

そうか、インターフェイスデザインはそういう方向に向かっているんだなぁと。
Windows も WPF でやっと時代に追いついたってことだね。

まあなんとか Gtk# はどういうもんか解ってきたぞと。