2015-02-09 15 views
8

Ho ottenuto questo widget Text e mi piacerebbe che espandesse e riempisse il suo intero genitore, usando il gestore della geometria Grid.Espandi widget di testo per riempire l'intero frame principale in Tkinter

Secondo gli esempi che ho visto, questo programma di esempio dovrebbe funzionare, purtroppo no, quando si espande la finestra, il contenuto non viene ridimensionato.

from Tkinter import * 
root = Tk() 

input_text_area = Text(root) 
input_text_area.grid(row=1, column=0, columnspan=4, sticky=W+E) 
input_text_area.configure(background='#4D4D4D') 

root.mainloop() 

Ogni aiuto è apprezzato

Per quel che vale, io sto correndo in Python 2.7 (ultima versione 2.x), e la codifica in PyCharm, anche se non credo che l'IDE è rilevante .

+1

afaik è necessario aggiungere pesi di colonna o qualcosa ... Ricordo di aver avuto questo problema una volta. questo link sembra rilevante http://userpages.umbc.edu/~dhood2/courses/cmsc433/spring2010/?section=Notes&topic=Python¬es=94 –

risposta

11

Quando si utilizza la griglia, qualsiasi spazio aggiuntivo nel genitore viene assegnato proporzionato al "peso" di una riga e/o di una colonna (es .: una colonna con un peso di 2 occupa il doppio dello spazio di una con un peso di 1). Per impostazione predefinita, le righe e le colonne hanno un peso pari a 0 (zero), il che significa che non viene dato loro spazio aggiuntivo.

È necessario indicare alla colonna che il widget si trova in un peso diverso da zero, in modo che qualsiasi spazio aggiuntivo quando la finestra cresce viene allocato a tale colonna.

root.grid_columnconfigure(0, weight=1) 

È inoltre necessario specificare un peso per la riga, e un valore di appiccicoso N+S+E+W se si vuole che crescere in tutte le direzioni.

5

Dal momento che la finestra contiene un solo widget e si desidera questo widget per riempire l'intera finestra, sarebbe più facile da usare la pack geometry manager invece di grid

input_text_area.pack(expand=True, fill='both') 

expand=True dice Tkinter per consentire il widget di espandersi a riempire qualsiasi spazio extra nel master della geometria. fill='both' consente al widget di espandersi sia orizzontalmente che verticalmente.

+1

Il mio codice era solo un esempio, il mio layout è un po 'più complesso, ho ridotto il problema all'espressione minima, non voglio davvero usare il gestore della geometria del pacchetto, lo trovo ancora più orribile da usare per meno di banali UI. –

0
from tkinter import * 
root = Tk() 

input_text_area = Text(root) 
input_text_area.grid(row=0, column=0, columnspan=4, sticky=N+S+W+E) 
input_text_area.configure(background='#4D4D4D') 
root.grid_columnconfigure(0, weight=1) 
root.grid_rowconfigure(0, weight=1) 

root.mainloop() 

non so se questo è quello che vuoi. ma questo riempie l'intero schermo.

Problemi correlati