2012-06-07 113 views
11

Acabo de escribir un código que crea una ventana (usando TKinter) y muestra un botón de funcionamiento.Establecer la posición en un botón en Python?

b = Button(master, text="get", width=10, command=callback) 

Pero me gustaría tener varios botones debajo de este.

¿Cómo se establece la fila y la columna del botón? Intenté agregar row = 0, column = 0,, pero eso no funcionaría.

Gracias

Respuesta

12

astynax es correcto. Para seguir el ejemplo que dio:

MyButton1 = Button(master, text="BUTTON1", width=10, command=callback) 
MyButton1.grid(row=0, column=0) 

MyButton2 = Button(master, text="BUTTON2", width=10, command=callback) 
MyButton2.grid(row=1, column=0) 

MyButton3 = Button(master, text="BUTTON3", width=10, command=callback) 
MyButton3.grid(row=2, column=0) 

Debería crear 3 filas de botones. Usar una grilla es mucho mejor que usar un paquete. Sin embargo, si usa la cuadrícula en un botón y empaqueta en otro, no funcionará y obtendrá un error.

+4

Recomiendo no preferir uno sobre el otro: aprenda las fortalezas de cada uno y use la herramienta adecuada para el trabajo. El paquete es notablemente potente y fácil para una cierta clase de problemas de diseño, como lo es la grilla. Cada uno puede resolver más fácilmente algunos problemas que el otro. –

3

Trate Grid Geometry Manager:

btns = [ 
    (lambda ctl: ctl.grid(row=r, column=c) or ctl)(
     Button(text=str(1 + r * 3 + c))) 
    for c in (0,1,2) for r in (0,1,2)] 

resultado:

[1][2][3] 
[4][5][6] 
[7][8][9] 
+1

-1 Tu código crea los botones pero tu variable 'btns' es una lista de Ninguno ... – FabienAndre

+0

@FabienAndre, corregido! ¡Gracias por comentar! – astynax

36

Hacer que un widget aparezca requiere que lo coloque usando lo que Tkinter llama "gestores de geometría". Los tres gerentes son grid, pack y place. Cada uno tiene fortalezas y debilidades. Estos tres administradores se implementan como métodos en todos los widgets.

La cuadrícula, como su nombre lo indica, es perfecta para colocar widgets en una cuadrícula. Puede especificar filas y columnas, las filas y columnas, relleno, etc.

Ejemplo:

b = Button(...) 
b.grid(row=2, column=3, columnspan=2) 

paquete de utiliza una metáfora cuadro, que le permite widgets "paquete" a lo largo de uno de los lados de una envase. el paquete es extremadamente bueno en todos los diseños verticales o totalmente horizontales. Las barras de herramientas, por ejemplo, donde los widgets están alineados en una línea horizontal, son un buen lugar para usar el paquete.

Ejemplo:

b = Button(...) 
b.pack(side="top", fill='both', expand=True, padx=4, pady=4)` 

lugar es el gestor de la geometría menos utilizada. Con lugar, especifique la ubicación x/y exacta y el ancho/alto exacto para un widget. Tiene algunas características agradables, como la posibilidad de utilizar coordenadas absolutas o relativas (por ejemplo, puede colocar un widget a 10,10 o al 50% del ancho o alto de los widgets).

A diferencia de grid y pack, el uso de place no hace que el widget padre se expanda o contraiga para adaptarse a todos los widgets que se han colocado dentro.

Ejemplo:

b = Button(...) 
b.place(relx=.5, rely=.5, anchor="c") 

Con esas tres gestores de geometría que puede hacer casi cualquier tipo de diseño se puede imaginar.

+0

¡Guau! Gracias. muy útil – EatMyApples

Cuestiones relacionadas