調べてみたら、lablgtkというライブラリがあった。
OCamlではモジュールと呼ぶのかな?
LablGtk
LablGtk is an OCaml interface to GTK+ 1.2 and 2.x.
opamでインストールできる。
$ opam install lablgtk
〜依存パッケージと共にインストールされる。
$ rehash
(zshを使っているので。)
これで lablgtk2コマンドが使えるようになった。
.opamディレトリにサンプルコードがインストールされると思ったが、無かった。
では、ソースをダウンロードしよう。
$ cd ~/src
$ wget https://forge.ocamlcore.org/frs/download.php/1261/lablgtk-2.18.0.tar.gz
--2014-01-20 23:33:50-- https://forge.ocamlcore.org/frs/download.php/1261/lablgtk-2.18.0.tar.gz
forge.ocamlcore.org (forge.ocamlcore.org) をDNSに問いあわせています... 87.98.154.45
forge.ocamlcore.org (forge.ocamlcore.org)|87.98.154.45|:443 に接続しています... 接続しました。
証明書の所有者の名前とホスト名 `forge.ocamlcore.org' が一致しません
怒られた。うーむ。良くないなーと思いつつも、えい。
$ wget --no-check-certificate https://forge.ocamlcore.org/frs/download.php/1261/lablgtk-2.18.0.tar.gz
--no-check-certificate サーバ証明書を検証しない
ダウンロードできた。
展開しよう。
$ tar zxf lablgtk-2.18.0.tar.gz
$ cd lablgtk-2.18.0/examples
$ ls
GL csview.ml events2.ml label.ml socket.ml
about.ml curve.ml expander.ml link_button.ml sourceview
accel_tree.ml custom_list_generic.ml fifteen.ml lissajous.ml spell.ml
action.ml custom_tree.ml filechooser.ml nihongo.ml spin.ml
assistant.ml custom_tree_generic.ml fixed_editor.ml notebook.ml test.xpm
assistant_tutorial.ml dcalendar.ml fixpoint.ml panel testdnd.ml
buttons.ml dialog-thread.ml gioredirect.ml pixview.ml testgtk.ml
calc.ml drawing.ml giotest.ml pousse.ml testthread.ml
calendar.ml druid.ml glade progressbar.ml text
canvas editor.ml gnome-fs-directory.png radiobuttons.ml timer.ml
cgets.ml editor2.ml gnome-fs-regular.png rpn.ml toolbar.ml
clist.ml entry.ml hello.ml rsvg tooltip.ml
combo.ml entry2.ml iconview.ml runthread.ml tree.ml
combobox.ml entrycompletion.ml image.ml scrolledwin.ml tree_model.ml
counter.ml eventbox.ml image256x256.rgb signal_override.ml tree_store.ml
cputs.ml events.ml kaimono.ml slide_show.ml tron.ml
いろいろあるなー。
手始めに、やっぱり hello.mlだよね。
$ lablgtk2 hello.ml
Hello World というラベルが付いたボタンのウィンドウが表示された。
ボタンを押すと、
Hello World
と文言を出力して終了した。
ソースを見ると、
$ cat hello.ml
(**************************************************************************)
(* Lablgtk - Examples *)
(* *)
(* There is no specific licensing policy, but you may freely *)
(* take inspiration from the code, and copy parts of it in your *)
(* application. *)
(* *)
(**************************************************************************)
(* $Id$ *)
open GMain
let window = GWindow.window ~border_width: 10 ()
let button = GButton.button ~label:"Hello World" ~packing: window#add ()
let main () =
window#event#connect#delete
~callback:(fun _ -> prerr_endline "Delete event occured"; true);
window#connect#destroy ~callback:Main.quit;
button#connect#clicked ~callback:(fun () -> prerr_endline "Hello World");
button#connect#clicked ~callback:window#destroy;
window#show ();
ほー。簡単そうに見えるなぁ。
#で連鎖してメッセージ呼び出しできるのかな?
今日はここまでにしておこう。
0 件のコメント:
コメントを投稿