2013-05-03 9 views
6

ich eine App mit tkinter schreiben und ich versuche, mehrere Etiketten in einem Rahmen zu setzen ... LeiderEtikettenbreite in tkinter

windowTitle=Label(... width=100) 

und

windowFrame=Frame(... width=100) 

sind sehr unterschiedliche Breiten ...

Bisher verwende ich diesen Code:

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 

Aus irgendeinem Grund setzt die Einstellung der Etikettenbreite die Breite nicht richtig oder verwendet keine Pixel als Maßeinheiten ... So gibt es eine Möglichkeit, das Widget windowTitle so anzuordnen, dass es sich an die Länge des Rahmens anpasst oder um die Etikettenbreite in Pixeln zu setzen?

+0

Warum in der Welt werden Sie den Place Geometrie-Manager? Verwenden Sie Pack oder Grid. –

+0

Es ist im Allgemeinen nicht notwendig, die Breite eines Etiketts anzugeben. Packe es in den Rahmen, lass den Geometrie-Manager damit umgehen. Größe des Rahmens ändern –

+0

Ich brauche wirklich Frame auf bestimmte Position eingestellt werden und bestimmte Größe haben ... Ist es möglich, 'w.pack()' Methode verwenden, um Widgets im Rahmen zu ändern? – Mirac7

Antwort

8

height und width definieren die Größe des Etiketts in Texteinheiten wenn es Text enthält. Folgen @Elchonon Edelson Rat und Set-Größe des Rahmens + ein kleiner Trick:

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

Nicht wirklich, was ich im Sinn hatte ... Allerdings , 'fill = X' sollte mir gut dienen ... Danke ... – Mirac7