2013-05-03 14 views
6

Sto scrivendo un app con Tkinter e sto cercando di mettere diverse etichette in una cornice ... Purtroppo,Larghezza etichetta in tkinter

windowTitle=Label(... width=100) 

e

windowFrame=Frame(... width=100) 

sono molto diverse larghezze ...

Finora, io uso questo codice:

windowFrame=Frame(root,borderwidth=3,relief=SOLID,width=xres/2,height=yres/2) 
windowFrame.place(x=xres/2-160,y=yres/2-80) 
windowTitle=Label(windowFrame,background="#ffa0a0",text=title) 
windowTitle.place(x=0,y=0) 
windowContent=Label(windowFrame,text=content,justify="left") 
windowContent.place(x=8,y=32) 

... 

#xres is screen width 
#yres is screen height 

Per qualche motivo, l'impostazione della larghezza dell'etichetta non imposta la larghezza correttamente, o non utilizza i pixel come unità di misura ... Quindi, c'è un modo per posizionare il widget windowTitle in modo tale che si adatti alla lunghezza del frame o per impostare la larghezza dell'etichetta in pixel?

+0

Perché nel mondo stai usando il manager Luogo geometria? Usa Pack o Grid. –

+0

In genere non è necessario specificare la larghezza di un'etichetta. Inseriscilo nel frame, lascia che sia il gestore della geometria a gestirlo. Ridimensiona la cornice. –

+0

Ho davvero bisogno del frame per essere impostato su una posizione specifica e per avere dimensioni specifiche ... È possibile usare il metodo 'w.pack()' per ridimensionare i widget all'interno del frame? – Mirac7

risposta

8

height e width definiscono la dimensione dell'etichetta in unità di testo quando contiene testo. del Segui @Elchonon Edelson consiglio e set dimensioni del telaio + un piccolo trucco:

from tkinter import * 
root = Tk() 

def make_label(master, x, y, h, w, *args, **kwargs): 
    f = Frame(master, height=h, width=w) 
    f.pack_propagate(0) # don't shrink 
    f.place(x=x, y=y) 
    label = Label(f, *args, **kwargs) 
    label.pack(fill=BOTH, expand=1) 
    return label 

make_label(root, 10, 10, 10, 40, text='xxx', background='red') 
make_label(root, 30, 40, 10, 30, text='xxx', background='blue') 

root.mainloop() 
+0

Non proprio quello che avevo in mente ... Comunque , 'fill = X' dovrebbe servirmi bene ... Grazie ... – Mirac7