CommonLisp에서 GUI 프로그래밍 ~ 라벨 및 항목 ~

소개



이번은 라벨과 엔트리(텍스트 박스와 같은 것)를 시험해 보고 싶습니다.

패키징



ltk를 Quicklisp로로드하고 패키지 정의
평소

packages.lisp
(ql:quickload "ltk")

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

라벨 및 항목 프로그램



엔트리에 입력한 캐릭터 라인을 라벨에 표시하는 프로그램입니다.

entry.lisp
(load "packages.lisp" :external-format :utf-8)

(in-package :cl-ltk)

(defun main ()
  (with-ltk ()
    (wm-title *tk* "Entry")
    (bind *tk* "<Alt-q>" (lambda (event)
                           (setq *exit-mainloop* t)))
    ;; ここからラベルとエントリの処理
    (let ((lbl1 (make-instance 'label :text "String input" :width 60))  ; 幅60ピクセルのラベル
          (entry (make-instance 'entry))                                ; エントリ
          (btn (make-instance 'button :text "Button"))                  ; ボタン
          (lbl2 (make-instance 'label :text "Label" :foreground 'red))) ; エントリに入力された文字列を表示するラベル(文字色は赤)
      (setf (command btn) (lambda () (setf (text lbl2) (text entry))))  ; ボタン押下時の処理
      (bind entry "<Return>" (lambda (event)                            ; Enterキー押下時の処理
                   (setf (text lbl2) (text entry))))
      (focus entry)                                                     ; フォーカスをエントリにセット
      (pack (list lbl1 entry btn lbl2) :fill :x))))                     ; ウィジェットをまとめて配置
                                                                        ; fillオプションで幅いっぱいに広げる(方向はx, yで指定)

;; 実行!
(main)

실행



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

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



Hello, world!를 입력해 보았습니다.
제대로 라벨에 표시되어 있네요.

마지막으로



라벨과 항목의 두 가지를 시도했습니다.
항목은 텍스트 상자처럼 보이지만 한 줄의 문자열 만 처리 할 수있는 것 같습니다.
VB나 C#등에서는 멀티 라인의 설정을 하면 복수행도 취급할 수 있네요.
LTK에서는 텍스트라고 하는 위젯을 사용하는 것으로 복수행의 캐릭터 라인도 취급할 수 있는 것 같습니다.

좋은 웹페이지 즐겨찾기