2012-06-07 11 views
11

Ho appena scritto un codice che crea una finestra (usando TKinter) e visualizza un pulsante di lavoro.Impostazione della posizione su un pulsante in Python?

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

Ma mi piacerebbe avere più pulsanti sotto questo.

Come si imposta la riga e la colonna del pulsante? Ho provato ad aggiungere row = 0, column = 0, ma non funzionerebbe.

Grazie

risposta

12

astynax è giusto. Per seguire l'esempio che hai dato:

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) 

Dovrebbe creare 3 file di pulsanti. Usare la griglia è molto meglio che usare il pacchetto. Tuttavia, se si utilizza la griglia su un pulsante e si impacchetta su un altro, non funzionerà e si otterrà un errore.

+4

Consiglio di non preferire l'uno sull'altro: impara i punti di forza di ciascuno e usa lo strumento giusto per il lavoro. Pack è straordinariamente potente e facile per una certa classe di problemi di layout, così come la griglia. Ognuno di loro può risolvere più facilmente alcuni problemi rispetto all'altro. –

3

Prova 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)] 

risultato:

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

-1 Il tuo codice crea un'istanza dei pulsanti ma la tua variabile 'btns' è una lista di Nessuno ... – FabienAndre

+0

@FabienAndre, corretto! Grazie per il commento! – astynax

36

Fare in modo che un widget appaia richiede di posizionarlo utilizzando ciò che Tkinter chiama "gestori geometria". I tre gestori sono grid, pack e place. Ognuno ha punti di forza e di debolezza. Questi tre gestori sono implementati come metodi su tutti i widget.

griglia, come suggerisce il nome, è perfetto per la posa di widget in una griglia. È possibile specificare righe e colonne, righe e colonne campate, imbottiture, ecc

Esempio:

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

pacchetto utilizza una metafora di dialogo, che ti permette di widget "Pack" lungo uno dei lati di un contenitore. pack è estremamente buono a tutti i layout verticali o orizzontali. Le barre degli strumenti, ad esempio, dove i widget sono allineati in una linea orizzontale, sono un buon posto per usare il pacchetto.

Esempio:

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

posto è il meno responsabile geometria utilizzata. Con il luogo si specifica la posizione esatta x/y e la larghezza/altezza esatta per un widget. Ha alcune caratteristiche interessanti come la possibilità di utilizzare le coordinate assolute o relative (ad esempio: puoi posizionare un widget a 10,10 o al 50% della larghezza o altezza del widget).

differenza grid e pack, utilizzando place non causa il widget genitore per espandere o comprimere per adattarsi tutti i widget che sono stati posti al suo interno.

Esempio:

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

Con questi tre dirigenti della geometria si può fare praticamente qualsiasi tipo di layout che si possa immaginare.

+0

Wow! Grazie. molto utile – EatMyApples