[ltk-user] two beginner questions (iterate over children / X_cursor)

harven at free.fr harven at free.fr
Sun Sep 30 21:12:27 UTC 2012


Hi, 

I am working through the tk tutorial using ltk
http://www.tkdocs.com/tutorial/firstexample.html
One of the first examples is a feet-to-meter converter.

At some point, the padding of the widgets is set by looping through
the children of the mainframe.

  foreach w [winfo children .c] {grid configure $w -padx 5 -pady 5}

Q1: How can I do this with ltk ? Is there a function that returns the list 
of the children of a widget ?

Q2: The *cursor* variable lists "X_cursor" as its first element, but tk 
reports an error. 

  (with-ltk nil 
     (pack (make-instance 'button
                       :text "some" :cursor "X_cursor" :width 15)))

 => Tcl/Tk error: bad cursor spec "x_cursor"

This is the sole cursor in *cursor* that produces an error.
I am using gnu/linux on debian squeeze stable and tk 8.5.


Finally, here is my attempt at building the converter. It seems to work, I welcome
any comments or advices. 


(defun calculate (arg)
  (let* ((*read-eval* nil)
         (num (read-from-string arg)))
    (if (numberp num) (format nil "~,4f" (* 0.3048 num)) "" )))

(defun converter-ltk ()
  (with-ltk ()
    (let* ((mainframe (make-instance 'frame :padding "\"3 3 12 12\""))
           (feet-entry (make-instance 'entry :width 7 :master mainframe))
           (label-1 (make-instance 'label :master mainframe))
           (label-2 (make-instance 'label  :text "feet" :master mainframe))
           (label-3 (make-instance 'label  :text "is equivalent to"
                                   :master mainframe))
           (label-4 (make-instance 'label  :text "meters" :master mainframe))
           (calc    (make-instance 'button :text "Calculate" :master mainframe
                                   :command 
                                   (lambda () 
                                     (setf (text label-1)
                                           (calculate (text feet-entry)))))))
      (bind feet-entry "<Return>" (lambda (evt) 
                                    (declare (ignore evt))
                                    (setf (text label-1)
                                          (calculate (text feet-entry)))))
      (wm-title *tk* "Feet to Meters")
      (grid mainframe 0 0 :sticky "nesw")
      (grid-columnconfigure mainframe 0 :weight 1)
      (grid-rowconfigure    mainframe 0 :weight 1)
      (grid feet-entry 1 2 :sticky "we")
      (grid label-1    2 2 :sticky "we")
      (grid label-2    1 3 :sticky "w")
      (grid label-3    2 1 :sticky "e")
      (grid label-4    2 3 :sticky "w")
      (grid calc       3 3 :sticky "w")
;      (loop for child in (children mainframe "winfo") ;; ??
;            do (configure child :padx 5 :pady 5))     ;; ??
      (focus feet-entry))))




More information about the ltk-user mailing list