2013-08-27 14 views
5

Próbuję przypisać szerokość widgetu (w tym przypadku etykiety) do zmiennej.Jak uzyskać szerokość widżetu tkintera?

Co mam tak daleko:

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() 

bym założyć, że bbox() powraca przesunięcie od góry po lewej, a szerokość i wysokość, jednak zwrócona wartość jest {0, 0, 0, 0}.

Jeśli ktoś mógłby wyjaśnić, dlaczego tak jest i jaki byłby krok, aby to osiągnąć, byłbym wdzięczny.

Odpowiedz

8

Powinieneś użyć bbox przeciwko widgetowi root (po którym wywołano metodę grid, a nie widgetowi umieszczonemu w siatce).

print(root.bbox()) 

Ale bez argumentu, poda ramkę graniczną widgetu głównego. Musisz określić column, row argumentu (z lbl):

print(root.bbox(0, 0)) 

Jeżeli widget chcesz uzyskać widżet nie pozycjonowana jako 0/0 kolumny/wiersza, trzeba też określić col2, row2 argument.

grid_bbox(column=None, row=None, col2=None, row2=None) Sposób przykład tkinter.Tk

powrotu krotką całkowitą współrzędne obwiedni tym widget sterowany przez sieć menedżera geometrii.

Jeśli podano COLUMN, ROW, ramka graniczna odnosi się do komórki z rzędem i kolumną 0 do określonej komórki. Jeśli podane są wartości COL2 i ROW2, ramka graniczna zaczyna się od tej komórki.

Zwracane liczby całkowite określają przesunięcie lewego górnego rogu widżetu głównego oraz szerokości i wysokości. (help(root.bbox))


Alternatywnie można użyć winfo_width i winfo_height:

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

"Jeśli ktoś może wyjaśnić, dlaczego tak jest" – beauxq

+0

@beauxq, w czasie odpowiedzi na pytanie, ja nie zrobił” t znać "dlaczego to jest" część, więc napisałem odpowiedź z "jaki byłby krok, aby poprawnie osiągnąć tę" część tylko. Teraz zaktualizowałem odpowiedź, aby uzupełnić brakującą część. Próbując odpowiedzieć na brakującą część, znalazłem alternatywny sposób. – falsetru

Powiązane problemy