tutorial - Python Tkinter: redimensiona los widgets de manera uniforme en una ventana
tkinter tutorial pdf (2)
Tengo una pequeña aplicación de Python de prueba ya que estoy aprendiendo Python y Tkinter y estoy tratando de encontrar la manera de cambiar el tamaño de una cuadrícula de etiquetas en una ventana. Me gustaría hacer una gran cuadrícula de cuadrados de diferentes colores, así que estoy usando etiquetas con un color de fondo establecido para hacer los cuadrados. Me gustaría cambiar el tamaño de los cuadrados automáticamente cuando el usuario amplía la ventana y luego hacer que cambien de tamaño y que se reduzcan para tener el mismo tamaño que la ventana.
Algo como esto:
Eso cambia de tamaño y escala uniformemente así:
En otras palabras: cada etiqueta debe escalar de manera uniforme a medida que la ventana escala. Ni siquiera estoy seguro de si estoy usando los términos correctos con "ventana" y "widget". Pero estoy colocando etiquetas en una GUI.
Código de prueba que estoy usando para tratar de hacer que esto funcione:
import Tkinter
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
label = Tkinter.Label(self,anchor="center",bg="green")
label.grid(column=0,row=0,sticky=''EW'')
label2 = Tkinter.Label(self,anchor="center",bg="black")
label2.grid(column=1,row=0,sticky=''EW'')
label3 = Tkinter.Label(self,anchor="center",bg="red")
label3.grid(column=2,row=0,sticky=''EW'')
label4 = Tkinter.Label(self,anchor="center",bg="purple")
label4.grid(column=0,row=1,sticky=''EW'')
label5 = Tkinter.Label(self,anchor="center",bg="blue")
label5.grid(column=1,row=1,sticky=''EW'')
label6 = Tkinter.Label(self,anchor="center",bg="yellow")
label6.grid(column=2,row=1,sticky=''EW'')
self.grid_columnconfigure(0,weight=0)
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title("Test App")
app.mainloop()
Completando la respuesta proporcionada por Bryan Oakley , el código para resolverlo en python 3 es el siguiente.
Tenga en cuenta que una opción para administrar la proporción para la que cambia el tamaño de la ventana es establecer los parámetros de peso para las funciones grid_columnconfigure(1,weight=1)
y grid_rowconfigure(1,weight=1)
a diferentes valores.
import tkinter
class simpleapp_tk(tkinter.Tk):
def __init__(self,parent):
tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
label = tkinter.Label(self,anchor="center",bg="green")
label.grid(column=0,row=0,sticky=''NSEW'')
label2 = tkinter.Label(self,anchor="center",bg="black")
label2.grid(column=1,row=0,sticky=''NSEW'')
label3 = tkinter.Label(self,anchor="center",bg="red")
label3.grid(column=2,row=0,sticky=''NSEW'')
label4 = tkinter.Label(self,anchor="center",bg="purple")
label4.grid(column=0,row=1,sticky=''NSEW'')
label5 = tkinter.Label(self,anchor="center",bg="blue")
label5.grid(column=1,row=1,sticky=''NSEW'')
label6 = tkinter.Label(self,anchor="center",bg="yellow")
label6.grid(column=2,row=1,sticky=''NSEW'')
self.grid_columnconfigure(0,weight=1)
self.grid_columnconfigure(1,weight=1)
self.grid_columnconfigure(2,weight=1)
self.grid_rowconfigure(0,weight=1)
self.grid_rowconfigure(1,weight=1)
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title("Test App")
app.mainloop()
Otorgue a todas las filas y columnas el mismo peso distinto de cero.
Por ejemplo:
self.grid_columnconfigure(0,weight=1)
self.grid_columnconfigure(1,weight=1)
self.grid_columnconfigure(2,weight=1)
self.grid_rowconfigure(0,weight=1)
self.grid_rowconfigure(1,weight=1)