Making Gridded Widgets Expandable
Hamilton, William
whamil1 at entergy.com
Mon Jul 30 10:24:04 EDT 2007
> 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
More information about the Python-list
mailing list