CommonLisp로 GUI 프로그래밍~버튼 그 1~

소개



이번에는 전회 작성한 빈 윈도우 위에 버튼을 1개 배치해 보겠습니다.

패키징



ltk를 Quicklisp로로드하고 패키지 정의
이것은 이전과 동일합니다.

packages.lisp
(ql:quickload "ltk")

(defpackage :cl-ltk
  (:use :common-lisp :ltk))

버튼 1개를 배치하는 프로그램



버튼을 누르면 「Button pressed!」라고 콘솔에 표시해, 윈도우를 닫는 프로그램입니다.

button.lisp
;; パッケージをロードする
(load "packages.lisp" :external-format :utf-8)

;; cl-ltkパッケージの中に入る
(in-package :cl-ltk)

;; Main function
(defun main ()
  (with-ltk ()
    (wm-title *tk* "Button Test")
    (bind *tk* "<Alt-q>" (lambda (event)
                           (setq *exit-mainloop* t)))
    ;; ここからボタン処理
    (let ((btn (make-instance 'button
                              :master nil    ; トップレベルウィンドウ
                              :text "Button" ; ボタンに表示する文字列
                              ;; 以下ボタンが押下された時の処理
                              :command (lambda ()
                                         (format t "Button pressed!~%")  ; 「Button pressed!」とコンソールに表示し、
                                         (setq *exit-mainloop* t)))))    ; ウィンドウを閉じる
      ;; ボタンを配置
      (pack btn))))

;; 実行!
(main)

실행



SBCL을 시작하고 다음 명령으로 실행
(load "button.lisp" :external-format :utf-8)

이하 실행중인 모습
Raspbian에서 실행했습니다.



버튼을 누르면 창이 닫힙니다.
또한 콘솔에 "Button pressed!"가 표시됩니다.

마지막으로



빈 창에 버튼 1개를 배치해 보았습니다.
람다 식이라는 익명 함수를 사용하여 실제 처리를 기술해 나가는 곳이 다른 GUI 프로그래밍과 다르다고 느꼈습니다.
그렇다고 해도 자신이 C/C++ & Win32API라든지 VB, C#의 GUI 정도밖에 모르는 탓이기도 하다고 생각합니다만・・・.

좋은 웹페이지 즐겨찾기