Ltkのメモ

  • 書きかけ

    雑記

  • with-ltkはwishの起動やmainloopの呼び出しとか全部やってくれるマクロ.基本的にltkのプログラミングではこれで全体を囲む.マニュアルでやりたいなら,(start-wish), (mainloop)を実行する.
  • ウィジットのmasterオプションは親ウィジットの指定.nilはトップが親の場合.

イベントハンドリング

  • 単純なイベント(ボタンのプレスとか)はウィジット生成時に:commandで定義できるけど,一般的にはbindを使う.(bind widget event function)形式で指定する.functionは1変数関数で,その変数にはイベントが格納される.マニュアルの下記例が分かりやすい.
(defun scribble ()
  (with-ltk ()
   (let ((canvas (make-instance 'canvas))
     (down nil))
     (pack canvas)
     (bind canvas "<ButtonPress-1>"
           (lambda (evt)
             (setf down t)                                    
             (create-oval canvas
                      (- (event-x evt) 10) (- (event-y evt) 10)
                      (+ (event-x evt) 10) (+ (event-y evt) 10))))
     (bind canvas "<ButtonRelease-1>" (lambda (evt) 
                                        (declare (ignore evt))
                                        (setf down nil)))
     (bind canvas "<Motion>"
           (lambda (evt)
             (when down
               (create-oval canvas
                    (- (event-x evt) 10) (- (event-y evt) 10)
                    (+ (event-x evt) 10) (+ (event-y evt) 10))))))))