2012-10-25 10 views
5

Voglio riempire la mia finestra con, diciamo, le etichette e voglio che si avvolgano una volta che la colonna sarà più grande della dimensione della finestra corrente (o meglio del frame principale).Come si crea un layout di Tiling/layout di flusso in TkInter?

Ho provato a usare il layout grid, ma poi devo calcolare da solo le dimensioni del contenuto di ogni riga, per sapere quando mettere il prossimo elemento nella riga successiva.

Il motivo per cui lo chiedo è perché voglio creare una sorta di icone di file affiancate.

O chiesto in modo diverso, c'è qualcosa come Swing FlowLayout per TkInter?

risposta

7

Quello che faccio quando voglio qualcosa di simile è usare il widget di testo per un contenitore. Il widget di testo può avere widget incorporati e si avvolgono esattamente come il testo. Finché i tuoi widget sono tutti della stessa altezza, l'effetto è piuttosto bello.

Per esempio (tagliato e incollato dalla questione su richiesta dell'autore):

textwidget = tk.Text(master) 
textwidget.pack(side=tk.LEFT, fill=tk.BOTH) 
for f in os.listdir('/tmp'): 
    textwidget.window_create(tk.INSERT, window=tk.Label(textwidget, text=f)) 
+0

Grande! grazie. per favore inserisci l'esempio di codice che ho fornito nella tua risposta, quindi la persona successiva che sta cercando questo non deve cercare i documenti sul widget di testo :) – devsnd

+0

L'utente può ancora utilizzare 'Text' come una casella di testo e digitare testo o eliminare elementi con backspace ecc., che è probabilmente indesiderabile per utilizzarlo come gestore della GUI. Puoi disabilitare la modifica con 'textwidget.config (state = tk.DISABLED)'. Anche così, l'utente può selezionare testo/spazio vuoto e il cursore appare come un cursore di testo. Queste due cose possono finalmente essere corrette anche con il seguente codice che imposta il colore di selezione dello sfondo sul normale colore di sfondo della casella di testo e cambia il cursore in una freccia. 'textwidget.config (selectbackground = textwidget.cget ('background'), cursor = 'arrow')' – nitro2k01

+0

@ nitro2k01: una soluzione probabilmente più semplice è semplicemente aggiungere associazioni di tasti che disabilitano la selezione. Inoltre, quando il widget è disabilitato non ci sarà alcun cursore di inserimento, quindi non è necessario cambiarlo. –

Problemi correlati