[ltk-user] Example of scrollbar available?

Josef Wolf jw at raven.inka.de
Fri Dec 13 07:10:54 UTC 2013


On Do, Dez 12, 2013 at 04:30:47 -0800, Jason Miller wrote:
> >Your example works fine. But it covers only a single text widget.
> >I am trying to scroll a collection of widgets...
> Well, strangely enough, tk doesn't have this as a widget.  There are
> variouls hacks to get it, and it looks like scrolled-frame
> implements it.  However, when setting the master of widgets that go
> in it, you'll need to use the INTERIOR accessor like so:
> 
> (ltk:with-ltk ()
> 	   (let ((sf (make-instance 'ltk:scrolled-frame)))
> 	     (ltk:pack sf)
> 	     (loop for i from 1 to 20
> 		  for label = (make-instance 'ltk:label :master (ltk:interior sf)
> :text "Hello, World!")
> 		  do (ltk:pack label))))

This works great! Thanks Jason!

What is this INTERIOR thing? I've never seen such a thing in Perl/Tk. And the
Tk doc's seem to suggest every non-mainwindow is an interior window. But this
is about windows, not widgets.

There seems to be still one problem, though: When the root window is resized,
the size of the scrolled-frame is not adopted. :expand t :fill :both don't
seem to have an effect. The scrolled-frame seems to have a maximum
size. Increasing this with the :height and :wide options don't seem to have an
effect.

Here's the current code:

  (with-ltk ()
    (let* ((root (make-instance 'frame))
           (branches (make-instance 'scrolled-frame :master root
                                    :height 1000 :width 1000))
           (quit-button (make-instance 'button :master root
                                       :text "Quit"
                                       :command (lambda ()
                                                  (setf *exit-mainloop* t)))))
      (pack root :side :top)
      (pack branches :side :top :expand t :fill :both)
      (pack quit-button :side :top :pady 10)

      (loop for i from 1 to 20
         for label = (make-instance 'ltk:label :master (ltk:interior branches)
                                    :text (format nil "Hello, World ~d!" i))
         do (ltk:pack label))

      (bind root "<KeyPress-q>" (lambda (ev) (declare (ignore ev))
      (exit-wish)))

      (do-msg "huhu")))

-- 
Josef Wolf
jw at raven.inka.de



More information about the ltk-user mailing list