【问题标题】:How to get the width of tkinter widget?如何获取 tkinter 小部件的宽度?
【发布时间】:2013-08-29 23:09:53
【问题描述】:

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

到目前为止我所拥有的:

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}

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

【问题讨论】:

    标签: python python-3.x tkinter width


    【解决方案1】:

    您应该对root 小部件使用bbox(在该小部件上调用了grid 方法,而不是放在网格中的小部件)。

    print(root.bbox())
    

    但如果没有参数,它将给出根小部件的边界框。您需要指定columnrow 参数(lbl):

    print(root.bbox(0, 0))
    

    如果您想要获取的小部件不定位为 0/0 列/行,您还需要指定 col2row2 参数。

    grid_bbox(column=None, row=None, col2=None, row2=None)方法 tkinter.Tk 实例

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

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

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


    您也可以使用winfo_widthwinfo_height

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

    【讨论】:

    • "如果有人能解释这是为什么"
    • @beauxq,在回答问题时,我不知道“为什么会这样”部分,所以我发布了“正确实现这一点的步骤是什么”部分的答案只要。现在我更新了答案以包括缺失的部分。通过尝试回答缺失的部分,我找到了替代方法。
    • root.bbox(0,0) 返回 (0,0,0,0)。 getWidth() 方法返回 1。
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多