Hi,
I managed to get myself sorted out with my previous question.
Now I'm having trouble adding a button to my application. I'm not sure whether this is a lisp question, or an ltk question, so please bear with me. Here's a simplified version of the failing code:
(in-package :ltk) (defparameter *cvs* nil)
(defun draw-circle (x y radius color) (format t "B Canvas is ~a~%" *cvs*) (itemconfigure *cvs* (create-oval *cvs* (- x radius) (- y radius) (+ x radius) (+ y radius)) :outline color))
(defun testit () (with-ltk () (let* ((*cvs* (make-instance 'canvas :width 200 :height 200)) (b (make-instance 'button :master nil :text "Do it!" :command (lambda () (draw-circle 100 100 20 :red)))))
(format t "A Canvas is ~a~%" *cvs*) (pack *cvs*) (pack b) (draw-circle 100 100 40 :blue))))
When I load this, and call the function testit from the REPL, it displays the blue circle correctly, but fails to display the red one. Here is what I see in the REPL:
CL-USER> (load "testit.lisp") #P"/Users/neil/devel/lispgui/testit.lisp" CL-USER> (in-package :ltk) #<Package "LTK"> LTK> (testit) A Canvas is #<CANVAS #x873D586> B Canvas is #<CANVAS #x873D586> B Canvas is NIL
It prints the "B Canvas is NIL" when I click on the button, so this is obviously why it fails to draw the red circle. But, I don't understand why *cvs* is nil in this case. I'm sure this is painfully obvious, but not to me. Can someone point me in the right direction please?
Neil.