Ltk:キーバインドを設定する - lisp-cookbook-ja/common-lisp GitHub Wiki

  • キーバインドを設定する
;;; LTKのbind

(ql:quickload :ltk)

(defpackage :ex4-24
  (:use :common-lisp :ltk))

(in-package :ex4-24)

(defun keybind-1 ()
  (with-ltk ()
    (wm-title *tk* "キーバインド")
    (minsize *tk* 600 500)
    (let* ((msg (make-instance 'message
                               :text "キーバインドのテスト: Alt-qで終了"
                               :width 1000
                               :background "#FFFFFF"))
           (quit-button (make-instance 'button
                                       :text "Quit"
                                       :command (lambda ()
                                                  (setf *exit-mainloop* t)))))
      (bind *tk* "<Alt-q>"
            (lambda (event)
              (declare (ignore event))
              (funcall (command quit-button))))
      (pack msg :side :top :fill :x)
      (pack quit-button :side :bottom :fill :x))))

(keybind-1)

キーバインドを設定する②

(ql:quickload :ltk)

(defpackage :ltkdoc-bind
  (:use :common-lisp :ltk))

(in-package :ltkdoc-bind)

(defun scribble ()
  (with-ltk ()
    (wm-title *tk* "Bindのテスト")

    ;;オブジェクト定義
    (let* ((msg (make-instance 'message
                               :text "Ctrl-r 赤色、Ctrl-b 青色、 Ctrl-g 緑色、Alt-qで終了"
                               :width 1000
                               :background "#FFFFFF"))
           (stat (make-instance 'message
                                :text ""
                                :width 1000
                                :background "#FFFFFF"))
           (canvas (make-instance 'canvas :background :black))
           (down nil)
           (color :white))
      (pack msg :side :top :fill :x)
      (pack stat :side :top :fill :x)
      (pack canvas)
      ;;マウスボタン定義
      (bind canvas
            "<ButtonPress-1>"
            (lambda (evt)
              (setf down t)
              (setf (text stat) "<ButtonPress-1>")
              (itemConfigure canvas
                             (create-oval canvas
                                          (- (event-x evt) 10) (- (event-y evt) 10)
                                          (+ (event-x evt) 10) (+ (event-y evt) 10))
                             "fill" color)))
      (bind canvas
            "<ButtonRelease-1>"
            (lambda (evt)
              (declare (ignore evt))
              (setf (text stat) "<ButtonRelease-1>")
              (setf down nil)))
      (bind canvas 
            "<Motion>"
            (lambda (evt)
              (when down
                (setf (text stat) "<ButtonPress-1> + <Motion>")
                (itemConfigure canvas
                               (create-oval canvas
                                            (- (event-x evt) 10) (- (event-y evt) 10)
                                            (+ (event-x evt) 10) (+ (event-y evt) 10))
                               "outline" color))))
      ;;キーバインド定義
      (bind *tk* "<Alt-q>"              ; 終了
            (lambda (event)
              (declare (ignore event))
              (setf *exit-mainloop* t)))
      (bind *tk* "<Control-b>"          ; 青色にする
            (lambda (event)
              (declare (ignore event))
              (configure canvas :background :blue)))
      (bind *tk* "<Control-r>"          ; 赤色にする
            (lambda (event)
              (declare (ignore event))
              (configure canvas :background :red)))
      (bind *tk* "<Control-g>"          ; 緑色にする
            (lambda (event)
              (declare (ignore event))
              (configure canvas :background :green))))))

(scribble)
⚠️ **GitHub.com Fallback** ⚠️