Tkinter Problem

Peter Otten __peter__ at web.de
Sun Oct 24 06:36:33 EDT 2004


Maboroshi wrote:

> Why when I use the sticky command with the grid layout manager won't my
> Listbox expand it stays in the center maybe I am missing something but
> from every tutorial I see it says to do it this way
> 
> I am running Python2.3.4 on winxp I haven't tried it on linux yet
> 
> Any Ideas are appreciated
> 
> Let me know if I am not being clear enough
> 
> Cheers
> 
> Andrew
> 
> 
> from Tkinter import *
> 
> 
> class App(Frame):
>      def __init__(self, master=None):
>          Frame.__init__(self, master)

Remove

>          self.grid()

This means you have an additional grid containing a single control (the
Frame). Use a packer instead and make sure it consumes any extra space:
           
           self.pack(fill=BOTH, expand=True)

>          self.createWidgets()
> 
>      def createWidgets(self):
>          self.listbox = Listbox(self)
> # RIGHT HERE THIS WON'T EXPAND TO FILL
>          self.listbox.grid(row=0, column=0, rowspan=3, sticky=N+E+S+W)

You can configure the cell (0, 0) to consume any extra space:

           self.rowconfigure(0, weight=1)
           self.columnconfigure(0, weight=1)

> 
>          self.connect = Button(self, text="Connect")
>          self.connect.grid(row=0, column=1)
>          self.execute = Button(self, text="Execute")
>          self.execute.grid(row=1, column=1)
>          self.disconnect = Button(self, text="Disconnect")
>          self.disconnect.grid(row=2, column=1)
> 
>          self.entry = Entry(self)
>          self.entry.grid(row=3, column=0, columnspan=2, sticky=E+W)
> 
> 
> app = App()
> app.master.title("MySQL DB Project")
> app.master.minsize(400, 300)
> app.mainloop()

The Entry and Listbox widgets should grow now as expected. To distribute the
Buttons smoothly, you can either set the weight of columns 1 and 2 or put
all three of them in an extra Frame (which I would prefer).

Peter



More information about the Python-list mailing list