[ltk-user] Another newbie question..
    Neil Baylis 
    neil.baylis at gmail.com
       
    Tue Mar 11 04:46:27 UTC 2008
    
    
  
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.
    
    
More information about the ltk-user
mailing list