Tkinter Toplevel geometry

James Stroud jstroud at mbi.ucla.edu
Sun Mar 25 08:06:36 EDT 2007


James Stroud wrote:
> James Stroud wrote:
>> Chris wrote:
>>> Hi,
>>>
>>> If a user resizes a Toplevel window, or I set a Toplevel's geometry
>>> using the geometry() method*, is there any way to have the geometry
>>> reset to that required for all the widgets?
>>>
>>> I think I found what I'm looking for in tk itself:
>>> """
>>> 13.3. How can I clear the geometry settings for a toplevel?
>>> If you want to have Tk resize your toplevel to what the toplevel
>>> requires (ie: the user might have resized it, or a widget was
>>> removed), use [wm geometry $toplevel].
>>> """
>>> [from http://tcl.sourceforge.net/faqs/tk/]
>>>
>>>
>>>
>>> * for instance, if I want to turn of Tkinter's automatic adjustment of
>>> the window to fit all the widgets by doing something like
>>> self.geometry(self.geometry()), is there any way to undo that?
>>>
>>> Thanks,
>>> Chris
>>>
>>
>> Hi Chris,
>>
>> I think you are on to something. The equivalent of
>>
>>    [wm geometry $toplevel]
>>
>> in Tkinter would be
>>
>>    sometop.geometry()
>>
>> Or, equivalently,
>>
>>    sometop.wm_geometry()
>>
>> Or, calling the underlying tcl/tk interpreter directly
>>
>>    sometop.tk.call('wm', 'geometry', str(sometop))
>>
>> Which is redundant, but emphasizes the point: This does not resize the
>> widget as expected nor does it cause the window to resize upon adding 
>> new packing slaves--at least for the X11 based Tkinter for mac via the 
>> fink debian based package manager.
>>
>> Really wish things worked according to the docs a lot of the time or 
>> that they weren't so poorly written. Perhaps they are implying that 
>> you must pass parameters, however they do not explain how one might 
>> generate said parameters to get the required size to which they 
>> allude. Terribly disappointing.
>>
>> James
> 
> After playing with this an inordinate amount of time, I found that one 
> does need to supply parameters, namely the null parameter of an empty 
> string. Try:
> 
>   sometop.geometry('')
> 
> This repacks according to the widgets. Not quite clear from the 
> miserable docs, is it?
> 
> James

Now for the advanced question, how might one bind that to the 
resize/maximize button of the window decorations? I'm guessing with 
protocol, but its way past my bedtime.

James



More information about the Python-list mailing list