8

我正在尝试将小部件的宽度(在本例中为标签)分配给变量。

到目前为止我所拥有的:

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}.

如果有人可以解释为什么会这样,以及正确实现这一目标的步骤是什么,我会非常感激。

4

1 回答 1

14

您应该使用bboxroot部件(调用哪个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 实例的方法

返回由几何管理器网格控制的此小部件的边界框的整数坐标元组。

如果给定 COLUMN, ROW,则边界框从行和列为 0 的单元格应用到指定的单元格。如果给定了 COL2 和 ROW2,则边界框从该单元格开始。

返回的整数指定主小部件中左上角的偏移量以及宽度和高度。( help(root.bbox))


或者,您可以使用winfo_widthand winfo_height

def getwidth():
    print(lbl.winfo_width(), lbl.winfo_height())
于 2013-08-27T09:17:58.607 回答