Making Gridded Widgets Expandable

Jim jscrerar at compuserve.com
Mon Jul 30 13:04:48 EDT 2007


On Jul 30, 8:24 am, "Hamilton, William " <wham... at entergy.com> wrote:
> > From: Jim
> > Hi,
> > I'm looking at page 548 of Programming Python (3rd Edition) by Mark
> > Lutz.
> > The following GUI script works with no problem, i.e., the rows and
> > columns expand:
> > =================================================================
> > # Gridded Widgets Expandable page 548
>
> > from Tkinter import *
> > colors = ["red", "white", "blue"]
>
> > def gridbox(root):
> >     Label(root, text = 'Grid').grid(columnspan = 2)
> >     r = 1
> >     for c in colors:
> >         l = Label(root, text=c, relief=RIDGE, width=25)
> >         e = Entry(root, bg=c,   relief=SUNKEN, width=50)
> >         l.grid(row=r, column=0, sticky=NSEW)
> >         e.grid(row=r, column=1, sticky=NSEW)
> >         root.rowconfigure(r, weight=1)
> >         r += 1
> >     root.columnconfigure(0, weight=1)
> >     root.columnconfigure(1, weight=1)
>
> > root = Tk()
> > gridbox(Toplevel(root))
> > Button(root, text="Quit", command=root.quit).grid()
> > mainloop()
> > =================================================================
> > However, the following GUI script using class does not expand rows and
> > columns:
> > =================================================================
> > # Gridded Widgets Expandable 2
>
> > from Tkinter import *
> > colors = ["red", "white", "blue"]
>
> > class GUI(Frame):
> >     def __init__(self,master):
> >         Frame.__init__(self,master)
> >         self.grid()
> >         self.gridbox()
>
> >     def gridbox(self):
> >         Label(self, text = 'Grid').grid(columnspan = 2)
> >         r = 1
> >         for c in colors:
> >             l = Label(self, text=c, relief=RIDGE, width=25)
> >             e = Entry(self, bg=c,   relief=SUNKEN, width=50)
> >             l.grid(row=r, column=0, sticky=NSEW)
> >             e.grid(row=r, column=1, sticky=NSEW)
> >             self.rowconfigure(r, weight=1)
> >             r += 1
> >         self.columnconfigure(0, weight=1)
> >         self.columnconfigure(1, weight=1)
>
> > root = Tk()
> > root.title("Gridded Widgets Expandable")
> > app = GUI(root)
> > Button(root, text="Quit", command=root.quit).grid()
> > root.mainloop()
> > =================================================================
> > What am I missing?
>
> In the first, your gridbox has Toplevel(root) as its master, causing it
> to be created in a new window.  In the second, it has Frame(root) as its
> master, which does not create a new window.  Changing Frame to Toplevel
> in the class statement and the call to __init__ causes them to act
> identically.
>
> --
> -Bill Hamilton- Hide quoted text -
>
> - Show quoted text -

Thank you Bill Hamilton.




More information about the Python-list mailing list