[ltk-user] ltk-tile make-instance 'button :command

Peter Herth herth at peter-herth.de
Tue Apr 13 20:43:47 UTC 2010


Hi Everett,

I have to say, from the general style your code basically looks like
the code I would write.
Just a few comments, none of them ltk related:

- you set some variables, but never define them, rather use let*
- what lisp are you using, SBCL has pi defined as a constant?
- and the biggest one: DON'T use read on user input carelessly, try
for example entering #.(do-msg "huch!") instead of a number and press
calculate... read allows for evaluation of arbitrary lisp code.

Of course, the dialog layout could be different, but thats just fiddling a bit
with the options of pack...

So the code could look like:

(defun circularea ()
  (with-ltk (:debug-tcl nil)
    (wm-title *tk* "circularea")
    (let* ((label-d (make-instance 'label
                                   :text "A circle with a diameter of "))
           (entry-d (make-instance 'entry
                                   :text "0"))
           (label-u (make-instance 'label
                                   :text "units"))
           (label-a (make-instance 'label
                                   :text "has an area of "))
           (label-r (make-instance 'label
                                   :text "0"))
           (label-su (make-instance 'label
                                    :text "square units"))
           (b (make-instance 'button
                             :text "calculate"
                             :command
                             (lambda ()
                               (let* ((diameter (let ((*read-eval* nil))
                                                  (read-from-string
(text entry-d))))
                                      (radius (/ diameter 2))
                                      (area (* pi (* radius radius))))
                                 (setf (text label-r) area))))))
      (pack label-d)
      (pack entry-d)
      (pack label-u)
      (pack label-a)
      (pack label-r)
      (pack label-su)
      (pack b) )))


Peter




More information about the ltk-user mailing list