[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