2013-08-27 12 views
5

Ich versuche, die Breite eines Widgets (in diesem Fall eine Bezeichnung) einer Variablen zuzuweisen.Wie bekomme ich die Breite des tkinter-Widgets?

Was ich habe, so weit:

from tkinter import * 

def getwidth(): 
    print(lbl.bbox()) 

root = Tk() 

lbl = Label(root, text="test text") 
lbl.grid(row=0) 
btn = Button(root, text="GO", command=getwidth) 
btn.grid(row=1) 

root.mainloop() 

ich angenommen hätte, dass bbox() kehrt die von links oben versetzt und die Breite und Höhe, jedoch ist der zurückgegebene Wert {0, 0, 0, 0}.

Wenn jemand erklären könnte, warum das ist und was wäre der Schritt, um dies richtig zu erreichen, wäre ich dankbar.

Antwort

8

Sie sollten bbox gegen das root Widget verwenden (auf dem grid Methode aufgerufen wurde, nicht das Widget in das Raster gelegt).

print(root.bbox()) 

Aber ohne Argument, es wird Root-Widget Bounding Box geben. Sie müssen column, row Argument angeben (der lbl):

print(root.bbox(0, 0)) 

Wenn das Widget Sie Widget nicht als 0/0 Spalte/Zeile positioniert erhalten möchten, können Sie auch col2, row2 Argument angeben.

grid_bbox(column=None, row=None, col2=None, row2=None) Methode der tkinter.Tk Instanz

Return ein Tupel von ganzzahligen Koordinaten für den Begrenzungsrahmen dieses Widgets durch die Geometrie Manager Grid gesteuert.

Wenn COLUMN, ROW angegeben wird, gilt die Bounding Box von der Zelle mit Zeile und Spalte 0 für die angegebene Zelle. Wenn COL2 und ROW2 angegeben sind, beginnt die Bounding Box bei dieser Zelle.

Die zurückgegebenen Ganzzahlen geben den Versatz der oberen linken Ecke im Master-Widget und die Breite und Höhe an. (help(root.bbox))


Alternativ können Sie verwenden winfo_width und winfo_height:

def getwidth(): 
    print(lbl.winfo_width(), lbl.winfo_height()) 
+0

"Wenn jemand erklären könnte, warum das so ist" – beauxq

+0

@beauxq, Zum Zeitpunkt der Beantwortung der Frage, I didn‘ Ich kenne den "Warum das ist" -Teil, also habe ich die Antwort nur mit "Was wäre der richtige Schritt, um diesen Teil zu erreichen" veröffentlicht. Jetzt habe ich die Antwort aktualisiert und den fehlenden Teil hinzugefügt. Indem ich versuchte, den fehlenden Teil zu beantworten, fand ich einen alternativen Weg. – falsetru

Verwandte Themen