He estado buscando en diferentes sitios web tratando de averiguar qué peso tiene en tkinter. Conseguí esto de TkDocs :
Cada columna y fila tiene una opción de cuadrícula de “peso” asociada con ella, que le dice cuánto debe crecer si hay espacio adicional en el maestro para rellenar. De forma predeterminada, el peso de cada columna o fila es 0, lo que significa que no se expande para llenar el espacio.
- desplazamiento automático de texto y barra de desplazamiento en el cuadro de texto de Python
- _tkinter.TclError: sin nombre de visualización y sin variable de entorno $ DISPLAY
- Herramienta independiente de la plataforma para copiar texto al portapapeles.
- No se puede mostrar una imagen en Tkinter
- La cadena Python Tkinter en una fuente mide de manera diferente a la misma en el texto Widgit a medida que la cadena crece
¿Podría alguien poner esto en algún contexto para mí, ya que estoy luchando por entender lo que hace? He experimentado con el siguiente código, y parece que se mueven las cosas a través de la página cuando cambio los valores.
try: import tkinter except ImportError: # python 2 import Tkinter as tkinter import os mainWindow = tkinter.Tk() mainWindow.title("Grid demo") mainWindow.geometry('640x480-8-200') label = tkinter.Label(mainWindow, text="tkinter grid demo") label.grid(row=0, column=0, columnspan=3) mainWindow.columnconfigure(0, weight=1) mainWindow.columnconfigure(1, weight=1) mainWindow.columnconfigure(2, weight=3) mainWindow.columnconfigure(3, weight=3) mainWindow.columnconfigure(4, weight=3) mainWindow.rowconfigure(0, weight=1) mainWindow.rowconfigure(1, weight=10) mainWindow.rowconfigure(2, weight=1) mainWindow.rowconfigure(3, weight=3) mainWindow.rowconfigure(4, weight=3) fileList = tkinter.Listbox(mainWindow) fileList.grid(row=1, column=0, sticky='nsew', rowspan=2) fileList.config(border=2, relief='sunken') for zone in os.listdir('/Windows/System32'): fileList.insert(tkinter.END, zone) mainWindow.mainloop()
En los términos más simples posibles, un peso distinto de cero hace que una fila o columna crezca si hay espacio adicional. El valor predeterminado es un peso de cero, lo que significa que la columna no crecerá si hay espacio adicional.
Considere el siguiente código, que crea una ventana más grande que los widgets que están dentro, y para los cuales ninguna columna tiene peso:
import tkinter as tk root = tk.Tk() root.geometry("200x100") f1 = tk.Frame(root, background="bisque", width=10, height=100) f2 = tk.Frame(root, background="pink", width=10, height=100) f1.grid(row=0, column=0, sticky="nsew") f2.grid(row=0, column=1, sticky="nsew") root.grid_columnconfigure(0, weight=0) root.grid_columnconfigure(1, weight=0) root.mainloop()
Así es como se ve la ventana:
La razón por la que se ve así es porque se le ha dicho a tkinter que no le dé a ninguna de las columnas ningún espacio adicional, por lo que el espacio adicional no se utiliza a la derecha.
Ahora, cambie el código para que le demos peso a una sola columna:
root.grid_columnconfigure(0, weight=1)
Cuando reiniciamos, ahora tenemos una ventana que se ve así:
¿Que pasó? Debido a que la columna cero tenía un peso de uno, tkinter le dio el espacio adicional a esta columna. Podría haber establecido el peso en 1, 100, 100000 y obtendría el mismo resultado. En este caso, todo el espacio adicional va a esta columna.
¿Qué pasa si le das un peso a ambas columnas? El peso se divide entre las columnas proporcionales a su peso. Por ejemplo, supongamos que desea un área de navegación a la izquierda que ocupe 1/4 de la pantalla y el área principal debería ocupar 3/4 de la pantalla.
Cambia los pesos para que se vean así:
root.grid_columnconfigure(0, weight=1) root.grid_columnconfigure(1, weight=3)
Como ambas columnas tienen peso, se le da espacio adicional a ambas columnas. Por cada cuatro píxeles de espacio adicional, la columna 0 obtendrá 1 y la columna 1 obtendrá los otros 3.
Además, si cambia el tamaño de la ventana de forma interactiva, la proporción se conserva tanto como sea posible. Aquí está la misma ventana que manualmente redimensioné para ser mucho más ancha: