[ltk-user] two beginner questions (iterate over children / X_cursor)
Peter Herth
herth at peter-herth.de
Fri Oct 26 15:35:23 UTC 2012
Hi,
sorry for the late reply, it somehow fell through my inbox. See for
the answers below,
Peter
On Sun, Sep 30, 2012 at 11:12 PM, <harven at free.fr> wrote:
> 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 ?
No, there is no such function. But I don't think I ever needed it, as
I have the references to all widgets I created on the Lisp side
anyway. Just use (list label-1 label-2 ...) in your loop instead of
the call to children.
>
> 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.
>
Ah, probably the only cursor which starts with a capital lettter, I
need to fix this. Thanks for pointing that out.
>
> 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))))
>
> _______________________________________________
> ltk-user site list
> ltk-user at common-lisp.net
> http://common-lisp.net/mailman/listinfo/ltk-user
More information about the ltk-user
mailing list