Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

Common LispでGUIプログラミング(LTKライブラリ)

LinuxCommon Lisp + LTK なGUIプログラミング開発環境構築

CommonLispであれこれ遊んでいると、GUIなプログラミングとかやりたくなる。
ネタ的にはかなりニッチだと思われるが、備忘録として公開してみる。

この記事は、すでにCommonLispの開発環境が構築されていることが前提となっている。
CommonLispの開発環境構築がまだな人は、手前味噌ではあるが・・・ここで頑張ってみてくださいな。
MX Linux 19 にもClozure CL(Common Lisp)をインストール - Kamuycikap - SentenceDataBase

ちょっとだけ補足説明

LTKとは、CommonLispからTkと呼ばれるGUIライブラリを呼べるようにしたもの。

Tkとは、かなり古くからあるGUIライブラリで、手軽に利用できる特徴がある。
Tclと呼ばれるプログラミング言語とセットで公開されていて、Tcl/Tkなんて呼ばれている。
このTkの素晴らしいのは、Tclだけじゃなく、他のプログラミング言語からも呼びやすい設計になっていて、C言語やらPythonやらRubyやら・・・etcから利用できる。

当然、我らがCommonLispからも利用できる。
それがLTK。

Tcl/TKのインストール

なにはともあれ、そもそもPCにTkがインストールされてなければならない。
下記コマンドにてTcl/Tkをインストールする。
※下記はDebian系のディスとリビュージョンの場合なのであしからず

$ sudo apt-get install tcl
$ sudo apt-get install tk

CommonLispのREPLでLTKを試してみる

LTKは、QuickLispでLoadするだけで利用できる。
具体的には、REPLに

> (ql:quickload :ltk)
> (in-package :ltk)
> (ltktest)

って順番に実行するだけ。
どんな画面出てくるかは・・・こんな感じのが出ればOK。
http://www.peter-herth.de/ltk/ltk-linux.png

ソースコードを書く

早速コード書いてみる。

■ファイル名:ltksample.lisp

;;;; 新しいウィンドウを作成する
(ql:quickload :ltk)

(in-package :ltk)

(with-ltk ()
  (wm-title *tk* "GUIでハローワールド")
  (minsize *tk* 300 300)                ; 300px X 300px

  (let* ((b (make-instance 'button 
                          :master nil
                          :text "Press Me"
                          :command (lambda () (format t "Hello World!~%")))))
    (pack b)))

実行

REPLを起動し、load関数で上記のプログラムを読んであげるだけ。

> (load "ltksample.lisp")

サンプル

ここにいくつかサンプルを追加しました。
https://lisphub.jp/common-lisp/cookbook/index.cgi?Ltk