2012-05-05 15 views
6

Estoy tratando de escribir una interfaz de usuario simple con Tkinter en python y no puedo obtener los widgets dentro de una cuadrícula para cambiar el tamaño. Cada vez que cambio el tamaño de la ventana principal, los widgets de entrada y botón no se ajustan en absoluto.La cuadrícula Tk no cambiará el tamaño correctamente

Aquí está mi código:

class Application(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master, padding=(3,3,12,12)) 
     self.grid(sticky=N+W+E+S) 
     self.createWidgets() 

    def createWidgets(self): 
     self.dataFileName = StringVar() 
     self.fileEntry = Entry(self, textvariable=self.dataFileName) 
     self.fileEntry.grid(row=0, column=0, columnspan=3, sticky=N+S+E+W) 
     self.loadFileButton = Button(self, text="Load Data", command=self.loadDataClicked) 
     self.loadFileButton.grid(row=0, column=3, sticky=N+S+E+W) 

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

app = Application() 
app.master.title("Sample Application") 
app.mainloop() 

Respuesta

14

Agregue una ventana raíz y colóquela en una columna para que su widget Frame se expanda también. Ese es el problema, tiene una ventana raíz implícita si no especifica una y el marco en sí es lo que no se expande correctamente.

root = Tk() 
root.columnconfigure(0, weight=1) 
app = Application(root) 
+2

se agregó rowconfigure para permitir la expansión vertical también –

0

utilizo para este paquete. En la mayoría de los casos es suficiente. ¡Pero no mezcles ambos!

class Application(Frame): 
    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack(fill = X, expand =True) 
     self.createWidgets() 

    def createWidgets(self): 
     self.dataFileName = StringVar() 
     self.fileEntry = Entry(self, textvariable=self.dataFileName) 
     self.fileEntry.pack(fill = X, expand = True) 
     self.loadFileButton = Button(self, text="Load Data",) 
     self.loadFileButton.pack(fill=X, expand = True) 
+0

Analizaré el uso del paquete en lugar de la cuadrícula, pero por lo que he leído la cuadrícula también debería funcionar para cambiar el tamaño de los widgets. – mjn12

+0

No utilicé la red mucho tiempo, así que no sé. ¡buena suerte! – User

0

Un ejemplo de trabajo. Tenga en cuenta que debe establecer explícitamente la configuración para cada columna y fila utilizada, pero las columnas para el siguiente botón son un número mayor que el número de columnas que se muestran.

## row and column expand 
top=tk.Tk() 
top.rowconfigure(0, weight=1) 
for col in range(5): 
    top.columnconfigure(col, weight=1) 
    tk.Label(top, text=str(col)).grid(row=0, column=col, sticky="nsew") 

## only expands the columns from columnconfigure from above 
top.rowconfigure(1, weight=1) 
tk.Button(top, text="button").grid(row=1, column=0, columnspan=10, sticky="nsew") 
top.mainloop() 
Cuestiones relacionadas