[pygtk] expander packing issue

John Finlay finlay at moeraki.com
Sat Mar 4 13:23:58 WST 2006


Alex Roitman wrote:
> On Wed, 2006-03-01 at 20:09 -0800, John Finlay wrote:
>   
>> Alex Roitman wrote:
>>     
>>> Hello,
>>>
>>> I have asked this question before:
>>>    http://www.daa.com.au/pipermail/pygtk/2005-December/011572.html
>>> and was pointed by John Finlay to the proper solution:
>>>    http://www.daa.com.au/pipermail/pygtk/2005-December/011562.html
>>>
>>> Unfortunately, following the given advice still did not do the trick.
>>> Running the code below still leaves the window not shrunken in
>>> either direction. It seems to be limited by the size that would
>>> be a minimum size of the _expanded_ expander, not collapsed expander.
>>>
>>> ==============
>>> import gtk
>>>
>>> d = gtk.Dialog('Dialog')
>>> d.connect('delete-event',lambda obj,event: gtk.main_quit())
>>>
>>> e = gtk.Expander('Expander')
>>> e.add(gtk.Label('Label\nAnother line that is very very very long\n'
>>>                 'and another line'))
>>>
>>> def expander_toggled(expander,param):
>>>     if expander.get_expanded():
>>>         print "expanding -> do nothing"
>>>     else:
>>>         print "collapsing -> shrink both X and Y size"
>>>         d.resize(1,1)
>>>
>>> e.connect('notify::expanded',expander_toggled)
>>>
>>> d.vbox.add(e)
>>> d.show_all()
>>>
>>> gtk.main()
>>> ==============
>>>
>>> If after
>>>    print "expanding -> do nothing"
>>> I add:
>>>    d.resize(400,200)
>>> or if I resize the window manually to a larger size
>>> while expander is in the expanded state, I can see that
>>> the window does indeed shrink somewhat upon collapsing
>>> the expander, so I know that resize() is working.
>>> The problem is that it shrinks to the size constrained
>>> by _expanded_ state of the expander, not its _collapsed_
>>> state.
>>>
>>> After collapsing, I can manually resize the window
>>> to the smaller size, picking up "the slack" produced
>>> by collapsing the expander.
>>>
>>> Am I missing something obvious? How can I make the window
>>> shrink after expander is collapsed so that there's
>>> no "slack"?
>>>   
>>>       
>> I thought the message following mine actually indicated a better 
>> solution than the one I suggested:
>>
>> http://www.daa.com.au/pipermail/pygtk/2005-December/011564.html
>>
>> i.e. use d.set_resizable(False)
>>     
>
> This does shrink the dialog window, but then it becomes, er,
> not resizable :-) For a complex window with a lot of widgets
> and a text editable area, this is not very nice. We do want small
> size, but the user will ultimately decide what's the convenient
> size. Smallest is the nice default behavior on expander collapse.
>   
What's your thinking on how this would work?
> My wild guess as to what's happening would be that the size request
> of the expander widget is not set to the new state while the handlers
> are being run. It is properly set afterwards, so I can manually do
> what I want. But this behavior seems to leave me no way to do
> the obviously logical thing: free the space when expander is collapsed.
>   
If you add the expander using d.vbox.pack_start(e, False) the expander 
will shrink automatically. If a textview shares the vbox it will expand 
when the expander shrinks. Is that what you're looking for?

John


More information about the pygtk mailing list