Tkinter pack difficulty

jim-on-linux inq1ltd at inqvista.com
Wed Sep 12 14:35:34 EDT 2007


On Wednesday 12 September 2007 13:22, Simon Forman wrote:
> Hi all,
>
> I realize this is more of a Tk question than a python one, but
> since I'm using python and don't know Tcl/Tk I figured I'd ask here
> first before bugging the Tcl folks.
>
> I am having a terrible time trying to get a pack() layout working.
>
> I have three frames stacked top to bottom and stretching across the
> master window from edge to edge.
>
> Crude ASCII Art rendition of the frames:
>
> ============
>
> |  header  |
>
> ------------
>
> |   body   |
>
> ------------
>
> |   log    |
>
> ============
>
>
> I want the header and log frames to have a fixed height (and stick
> to the top and bottom, respectively, of the master frame) and the
> body frame to expand to fill the rest of the space, for instance if
> the window is maximized.
>
> Here is a simple script that /almost/ does what I want.   I've been
> tweaking the pack() options for three hours and I just can't seem
> to get the effect I want.  This /can't/ really be this hard can it?
>
> If you run the script, be aware that since there are only frame
> widgets the window will initially be very very tiny.  If you expand
> or maximize the window you'll see a thin black frame at the top,
> yay, a thin white frame at the bottom, yay, but the middle grey
> "body" frame will NOT span the Y axis, boo.
>
> It's there, and stretches from side to side, but it refuses to
> stretch top to bottom.  Adding a widget (say, a Text) doesn't help,
> the light grey non-frame rectangles remain.
>
> My investigations seem to indicate that the light grey bars are
> part of something the Tk docs call a "parcel" that each slave
> widget gets packed into.  Apparently the "header" and "log" frames
> don't use their entire parcels, but I don't know how to get the
> parcels themselves to "shrinkwrap" to the size of the actual Frame
> widgets.
>
> In any event,  my head's sore and I'm just about ready to take out
> some graph paper and use the grid() layout manager instead.  But I
> really want the automatic resizing that the pack() manager will do,
> rather than the static layout grid() will give me.
>
> Any thoughts or advice?

Sorry I can't help you with pack, I don't use it anymore.

I am able to do everything with grid that I can do with pack.
Once I learned to use grid I liked it better than pack.
Spend some time to learn grid you may like it.
I'm sure others will disagree, but for me it works for everything I 
need.

jim-on-linux
http://inqvista.com  
  


>
> Thanks in advance,
> ~Simon
>
> # Tkinter script
> from Tkinter import *
>
> t = Tk()
>
> header = Frame(t, bg="black", height=10)
> header.pack(expand=1, fill=X, side=TOP, anchor=N)
>
> body = Frame(t, bg="grey")
> body.pack(expand=1, fill=BOTH, anchor=CENTER)
>
> log = Frame(t, bg="white", height=10)
> log.pack(expand=1, fill=X, side=BOTTOM, anchor=S)
>
> t.mainloop()



More information about the Python-list mailing list