Как получить ширину виджета tkinter?


Я пытаюсь присвоить ширину виджета (в данном случае метки) переменной.

Что у меня есть до сих пор:

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

Я бы предположил, что bbox() возвращает смещение сверху слева и ширину и высоту, однако возвращаемое значение равно {0, 0, 0, 0}.

Если бы кто-нибудь мог объяснить, почему это так и каков был бы шаг к правильному достижению этого, я был бы очень рад.
1 6

1 ответ:

Вы должны использовать bbox против виджета root (на котором был вызван метод grid, а не виджет, помещенный в сетку).

print(root.bbox())

Но без аргументов, это даст ограничивающую рамку корневого виджета. Вы должны указать column, row аргумент (из lbl):

print(root.bbox(0, 0))

Если виджет, который вы хотите получить, не позиционируется как 0/0 столбец/строка, вам также нужно указать col2, row2 спор.

grid_bbox(column=None, row=None, col2=None, row2=None) способ получения tkinter.Tk экземпляр

Возвращает кортеж целочисленных координат для ограничивающего прямоугольника этого виджета, управляемого сеткой geometry manager.

Если задан столбец, строка, то ограничивающая рамка применяется из ячейки со строкой и столбцом 0 к указанной ячейке. Если заданы COL2 и ROW2, то ограничивающий прямоугольник начинается с этой ячейки.

Возвращаемые целые числа определяют смещение верхнего левого угла в главном виджете, а также ширину и высоту. (help(root.bbox))


В качестве альтернативы вы можете использовать winfo_width и еще winfo_height:

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