我的第一个LTK应用程序。尝试使用entry-field中的参数执行函数。
(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))
为什么函数只在源启动时执行一次?然后 - 任何行动。
答案 0 :(得分: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)