[Tutor] laying out frames

Zubin Wadia zubinw at zapdomain.ca
Tue May 16 00:38:44 CEST 2006


Thats great, thanks Michael for the examples, I'll tinker with grid() and
place().

Cheers!
--zubin

> On Mon, 15 May 2006 15:42:48 -0400 (EDT)
> "Zubin Wadia" <zubinw at zapdomain.ca> wrote:
>
>> Hello Everyone,
>>
>> Another basic question in regard to frame layouts with Tkinter.
>>
>> I want to create a basic quadrant of frames but am not able to follow
>> the
>> logic to do so, whats the right way or an easier way to control layout
>> of
>> frames and wigets. A pixel approach would be nice (where by you can
>> specify pixel locations for a frame or a widget to be located) instead
>> of
>> specifying arbitary location positions like LEFT, RIGHT, etc and things
>> moving constantly when you add more widgets or resize windows.
>>
>
> Hi Zubin,
>
> there are three different geometry managers in Tkinter, pack(), grid() and
> place().
> As you have noticed, pack() is very handy to use for simple gui layouts
> but more complex
> ones may be hard to achieve.
> grid() is more flexible than pack(), it lets you arrange widgets in row
> and columns, e.g.:
>
> from Tkinter import *
> root = Tk()
> # define rows and columns that should expand on window resizing
> root.grid_rowconfigure(1, weight=1)
> root.grid_rowconfigure(2, weight=1)
> root.grid_columnconfigure(0, weight=1)
> Label(root, text='Label1', bg='white').grid(row=0, column=0, sticky='ew')
> Label(root, text='Label2', bg='yellow').grid(row=0, column=1)
> Label(root, text='Label3', bg='green').grid(row=0, column=2)
> Label(root, text='Label4', bg='red').grid(row=1, column=0, columnspan=2,
> sticky='nsew')
> Label(root, text='Label5', bg='blue').grid(row=2, column=0, columnspan=3,
> sticky='nsew')
> root.mainloop()
>
> place() is even much more flexible than grid(), but it is much more
> complex to use, too,
> so I recommend to think twice if you really need its capabilities.
> With place() you can define absolute or relative x ynd y coords of a
> widget in its container and
> relative or absolute dimensions, e.g:
>
> from Tkinter import *
> root = Tk()
> Label(root, text='Label1', bg='green').place(x=10, y=40, relwidth=0.5,
> relheight=0.3)
> Label(root, text='Label2', bg='yellow').place(relx=0.1, rely=0.8,
> width=60, height=30)
> root.mainloop()
>
> I hope this helps
>
> Michael
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


-- 
"People demand freedom of speech to make up for the freedom of thought
which they avoid." -- Socrates (470?-399 BC),



More information about the Tutor mailing list