2011-05-30 8 views
9

He estado jugando con tkinter un poco y no puedo entender por qué el atributo "adhesivo" no parece funcionar con mi botón. He especificado que pegajoso es NW, lo que debería hacer que mi botón se adhiera al borde superior izquierdo, pero por alguna razón se pega a la esquina superior derecha. ¿Alguna idea de por qué?¿Cómo establecer correctamente la propiedad adhesiva del botón?

from tkinter import * 
from tkinter import ttk 

def test(): 
    name = userName.get() 
    text = "Hello {0}! Pleased to meet you.".format(name) 
    greeting.set(text) 

window = Tk() 

greeting = StringVar() 
userName = StringVar() 

name = Entry(window, textvariable=userName) 
name.grid(column=1, row=1, sticky=NW) 

button = Button(window, text="greeting", command=test) 
button.grid(column=2, row=1, sticky=NW) 

label = Label(window, textvariable=greeting) 
label.grid(column=1, row=2, sticky=NW) 

#creating a rectangle 
canvas = Canvas(window) 
canvas.grid(column=1, row=2) 
#attributes are x,y coordinates of two points 
x = canvas.create_rectangle(5,5,115,115)  

mainloop() 

Respuesta

7

El atributo adhesivo se aplica a la celda en la que se encuentra el widget, en lugar de a la cuadrícula completa o ventana completa. Por lo tanto, el widget es anclado a la esquina nw de su celda, es solo que no se puede saber porque la celda tiene exactamente el mismo ancho que el botón.

Dado que está colocando el botón en la celda superior derecha (fila 1, columna 2) pero dice que lo quiere arriba a la izquierda (¿de toda la ventana?) Es difícil saber exactamente lo que quiere. Sin saber lo que intenta lograr, es difícil hacer recomendaciones.

La forma más fácil de aprender el administrador de disposición de la cuadrícula es con papel y lápiz. Saque un papel cuadriculado y dibuje sus widgets en el papel. Entonces se vuelve obvio dónde colocar sus widgets.

También necesita conocer los comandos rowconfigure y columnconfigure, especialmente con respecto al atributo weight. Con este atributo puede identificar qué filas y columnas crecen y se encogen para ocupar cualquier espacio adicional. También es útil saber que puede aplicar estos atributos a filas y columnas vacías. Esto es útil si desea que sus widgets interiores permanezcan del mismo tamaño, y tenga algún extra aplicado a los bordes de su interfaz gráfica de usuario (generalmente no es útil, aunque a veces sí lo es).

Como regla general, cada ventana debe tener un widget "importante": el que domina la interfaz de usuario. Por lo general, este es un widget de lienzo o texto, pero no tiene que serlo. Busque ese widget y proporcione la fila y la columna en un peso de 1 (uno) para que crezca y se reduzca a medida que el usuario cambia el tamaño de la ventana. En su caso, este sería el lienzo en la fila 2, columna 1.

1

El punto es que la celda de la cuadrícula es exactamente el mismo tamaño que el botón - no se dará cuenta si en E o W ... Puede comprobar que al colocar todos sus widgets debajo de otra (todas las filas 0 y 0-4) verá que en ese caso el botón aparece NW. Espero que esto ayude ...

Cuestiones relacionadas