如何获取tkinter小部件的宽度?

DCA*_*CA- 6 python tkinter width python-3.x

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

到目前为止我所拥有的:

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()
Run Code Online (Sandbox Code Playgroud)

我会假设bbox()从左上角返回偏移量以及宽度和高度,但返回的值是{0, 0, 0, 0}.

如果有人能解释为什么会这样,那么正确实现这一目标的步骤将是非常好的.

fal*_*tru 11

您应该使用bboxroot窗口小部件(在其grid方法被调用,而不是把网格内的小部件).

print(root.bbox())
Run Code Online (Sandbox Code Playgroud)

但是没有参数,它将给出根小部件的边界框.你需要指定column,row参数(的lbl):

print(root.bbox(0, 0))
Run Code Online (Sandbox Code Playgroud)

如果你想在小部件获取部件不定位为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_widthwinfo_height:

def getwidth():
    print(lbl.winfo_width(), lbl.winfo_height())
Run Code Online (Sandbox Code Playgroud)

  • root.bbox(0,0) 返回 (0,0,0,0)。getWidth() 方法返回 1。 (2认同)