[ltk-user] Can't get SCALE value

JW james.robert.watson at gmail.com
Fri Dec 21 22:42:47 UTC 2012


JW <james.robert.watson <at> gmail.com> writes:

> 
> I am having two problems with SCALE.  
> 
> 1. I cannot set bounds to anything other than integers.  For example:
> (make-instance 'scale :from 0 :to (* 2 pi) ...
> gives me an error.
> 
> 2. I am unable to retrieve the :VARIABLE value
> 
> In the below, vales of UPPER-THETA and FORE-THETA never seem to be anything 
but 
> 0, no matter where I slide the scale.  I have tested all the drawing an update 
> code, I am stumped!
> 
> (defun controltest ()
>   "Test of a user-controlled robot arm"
>   (with-ltk ()
>     (let* ((upper-theta 0) (fore-theta 0)
> 	   (upper-slider 
> 	    (make-instance 'scale :from 0 :to 7 
> 			   :length  360 :variable upper-theta))
> 	   (fore-slider 
> 	    (make-instance 'scale :from 0 :to 7
> 			   :length  360 :variable fore-theta))
> 	   (cnvs (make-instance 'canvas :width cnvs-width :height cnvs-height))
> 	   (upper (manip:uctk-beam :cen-x 200 :cen-y 200 
> 				   :b-length 40 :b-width 20
> 				   :tk-cnvs cnvs))
> 	   (fore (manip:uctk-beam :cen-x 0 :cen-y 40 ; relative to upper
> 				  :b-length 40 :b-width 20
> 				  :tk-cnvs cnvs))
> 	   (slp-time 50) #|ms|# )
>       (labels ((update ()
> 		 (draw upper nil) ; contains FORE, no need to draw separately
> 		 (geo:set-member-theta upper 2 fore-theta)
> 		 (geo:set-theta upper upper-theta)
> 		 (after slp-time #'update)))
> 	(geo:add-geo upper fore) ; make FORE a member of UPPER
> 	(pack cnvs :fill :both :expand 1)
> 	(pack upper-slider :side :bottom)
> 	(pack fore-slider :side :bottom)
> 	(update)))))
> 
> 

Please excuse me, it appears I did not perform my due diligence, this question 
was answered 3 years ago at the following location:
http://permalink.gmane.org/gmane.lisp.ltk.user/329

The answer is that the name passed to :VARIABLE is not in fact updated 
automatically.  Instead of messing with :VARIABLE, I pass a LAMBDA expression to 
the :COMMAND keyword; and therefore the following is the correct way:

	   (upper-slider 
	    (make-instance 'scale :from 0 :to 7 
			   :length  360 
			   :command (lambda (val) (setq upper-theta val))))
	   (fore-slider 
	    (make-instance 'scale :from 0 :to 7 
			   :length  360 
			   :command (lambda (val) (setq fore-theta val))))






More information about the ltk-user mailing list