[pygtk] size request in scrolled windows + viewport
Pietro Battiston
toobaz at email.it
Tue Aug 25 18:30:18 WST 2009
Il giorno mar, 18/08/2009 alle 18.34 +0200, Alessandro Dentella ha
scritto:
> On Tue, Aug 18, 2009 at 03:44:08PM +0200, Pietro Battiston wrote:
> > Il giorno lun, 03/08/2009 alle 20.57 -0700, John Finlay ha scritto:
> > > On 08/03/2009 01:27 PM, Alessandro Dentella wrote:
> > > > Hi
> > > >
> > > > I have a table with many widgets inside, so that total dimenstions are
> > > > bigger that the screen so that I put it in a ScrolledWindow + ViewPort.
> > > >
> > > > So far so good. ow I have a Window with all widgets in a pane that scrolls
> > > > fine... but starts very little indeed.
> > > >
> > > > I'd like to know how to propagate the dimentions that the table would
> > > > have requested to set dimentions of the Viewport.
> > > >
> > > > I'm a little lost between size_request/get_child_requisition and similar
> > > > methds.
> > > >
> > > >
> > > If the table is larger than the screen then I would assume you want the
> > > window to be smaller than the table. I usually set the default size of
> > > the Window so it starts up bigger than the minimum size.
> >
> > Right. Though several days passed, I'd like to signal that a deeper
> > answer is that pygtk (and Gtk in general) doesn't know/care about the
> > available size of the screen. More info can be found on the discussion
> > following this mail:
> >
> > http://mail.gnome.org/archives/gtk-devel-list/2009-January/msg00057.html
> >
> > Though horrible non-portable hacks are indeed possible, the clean
> > "solution" is to:
> > - set reasonable defaults
>
> what is a "reasonable default"? It's just a height/width calculated on the
> screen the user is using. I don't think you can find any better value.
>
Sure... this solution is "clean" gtkishly, I don't mean it is
satisfactory.
>
> > - remember user-defined resizes across program runs
>
>
> That doesn't helpl when I want to guess the best "starting" window
> dimention.
Again, sure.
>
> Really there was another mail - mistakenly sent to John Finlay that answerd
> me- that I report here:
>
>
> Thanks John,
>
> I'd like to set it no greater than really needed. Now I query the table with
> size_request(), but if I set dimentions -possibly reduced- on the Viewport
> (or SrolledWidow) with set_size_request(x,y) that would inhibit the
> possibility for a user to further reduce it, and set_default_size() only
> work on window...
>
>
> My workaround is to:
>
> 1. get the size_request of the table
> 2. derive a best macth, based on screen dimentions and size_request
This is where horrible non-portable hacks are needed for precision (if
you want to calculate the space of the screen free from panels etc.)
> 3. understand how many pixels are needed by non ViewPort staff around it
> 4. set_default_size() on the window so that the user can still interact
> with it and refine it
>
> Of course I could simplify all this process if I could
>
> 1. set size_request() on the Viewport/ScrolledWidow
> 2. set a parameter that says: you can resize
If you _ovveride_ size_request() (presumably by defining the
do_size_request() method), then the user _can_ resize.
If you instead use set_size_request(), the user can't (it is described
by documentation as "the smallest size a widget can accept while still
functioning well and drawing itself correctly", so the limitation makes
sense).
In your case, why isn't a gtk.Window.resize() enough?
>
> At the end I don't understand why size_request of the table inserted in the
> ViewPort is not forwarded upward to it's container (the ViewPort).
I'm not sure what you'd want... the goal of the ScrolledWindow is
_exactly_ to break the chain of size_requests... but if you want, a more
pragmatic answerm may be "not to overflow from screen with big
requests".
Pietro
More information about the pygtk
mailing list