Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Apr 15 08:38:46 CEST 2009

En Tue, 14 Apr 2009 18:42:32 -0300, norseman <norseman at hughes.net>  

> Gabriel Genellina wrote:
>> En Mon, 13 Apr 2009 15:13:53 -0300, norseman <norseman at hughes.net>  
>> escribió:
>>> Gabriel Genellina wrote:
>> Below there is an attempt to reproduce the layout you describe in the  
>> PDF:

>> from Tkinter import *
>> root = Tk()
>> pane = Frame(root, width=400, height=300)
>> pane.pack(fill="both", expand=1)
>> w1 = Label(pane, text="1", bg="white")
>> w1.place(relwidth=0.1, relheight=0.5)
>> w2 = Label(pane, text="2", bg="yellow")
>> w2.place(relwidth=0.25, relheight=0.3, relx=0.1)
>> w3 = Label(pane, text="3", bg="red")
>> w3.place(relwidth=0.2, relheight=0.2, relx=0.1, rely=0.3)
>> [...]

> Anyone having the same problem I have had needs to copy/paste the effort  
> and play with it a bit.
> WOW! - it's what I've been trying to do!!!!!  (much more YES than not)
> One can substitute a Frame widget for the Label widget and see how it  
> will work.  Do take note that as you traverse away from the 0,0 (here  
> assumed to be top left) point the prior (sum) of the prior widget(s)  
> relwidth (to left) goes into the relx and the same addition to the prior  
> relheight(s) (above) goes into the rely displacements of the current.  
> Also take note of how the parcels flush out at logical places.
> Place is not a grid (it's parcelling) and it's based on units of "%" of  
> Frame it is used in.  That is: Place uses a "%" value rather than a  
> finite distance. Thus, to have two different, but same screen size,  
> frames, each in a differently fixed sized frame of it own, YOU WILL HAVE  
> TO REDO THE MATH. Even if both are hooked at the 0,0 of their respective  
> masters.

That's not really true. "place" takes a position and a size; both can be  
relative (percent, based on its parent), absolute (in pixels, inches, or  
other units), and you can even mix both types. x,y are absolute; relx,rely  
are relative; same goes for height,width and relheight,relwidth.

The available absolute units are: 200 (an integer, *not* 200.0) means 200  
pixels; "200m" (a string) means 200 mm, "200p" means 200 points (1/72"),  
"200i" means 200 inches, and finally "200c" means 200 cm. So you can  
define the exact size and position for each element.

Relative sizes and positions are automatically scaled when the container  
is resized -- in my example, if you resize the window all the "parcels"  
grow and shrink accordingly.

With absolute sizes, you don't have to redo the math each time, but  
resizing isn't automatic. Perhaps absolute sizes are better suited for  
your application.

> Gabriel - THANK YOU VERY MUCH!!!!!
> May not be politically correct but:
> Whatever your gender - Please give yourself a good hug for me.

Glad to be of any help. I'm a male, btw.

Gabriel Genellina

More information about the Python-list mailing list