3

我的第一个 LTK 应用程序。尝试使用输入字段中的参数执行函数。

(defpackage :test
  (:use :cl
    :ltk))

(in-package :test)

(defun main()
  (with-ltk ()
    (let* ((f (make-instance 'frame
                 :height 200
                 :width 300))
       (e (make-instance 'entry
                 :master f
                 ))
       (b (make-instance 'button
                 :master f
                 :text "Go"
                 :command (test (text e)))))
      (wm-title *tk* "Test")
      (pack f)
      (pack e :side :left)
      (pack b :side :left)
      (configure f :borderwidth 3)
      (configure f :relief :sunken))))

(defun test (str)
  (format t "String: ~a" str))

为什么在启动源时函数只执行一次?然后 - 任何行动。

4

1 回答 1

3

如果要传递回调,(lambda () ...)请在代码中使用 , 即:

...
(b (make-instance 'button
                  :master f
                  :text "Go"
                  :command (lambda () (test (text e))))))

否则,您(test (text e))将在make-instance调用时执行,在对象初始化之前。

如果您打开调试输出,则更容易发现此问题:(setf ltk:*debug-tk* t)

于 2011-10-31T09:57:13.020 回答