意外的标签宽度值

时间:2013-08-27 14:15:07

标签: python python-3.x tkinter

我正在三个不同的时间读取标签的宽度,只有其中一个产生正确的输出..代码:

from tkinter import *

def getwidth(string):
    print(string+str(lbl1.winfo_width()))

root = Tk()

lbl1 = Checkbutton(root, text="test text")
lbl1.grid(row=0,rowspan=2)


print("first "+str(lbl1.winfo_width()))
getwidth("second ")

btn = Button(root, text="GO", command=lambda x="third ": getwidth(x))
btn.grid(row=2)

root.mainloop()

如何在前两个输出中读取正确的宽度(69)而不必依赖按钮命令?感谢

目前的产出是:

first 1
second 1
third 69

1 个答案:

答案 0 :(得分:2)

嗯,不幸的是,你做不到。前两次在窗口加载之前完成(这导致它返回默认值1,因为标签尚未绘制)。第三次在加载窗口(绘制标签)后完成,因此返回正确的数字。

您必须记住,在您致电root.mainloop并加载窗口之前,小部件不会放在屏幕上。当然,它们存在于幕后(否则会抛出NameError),但它们不在屏幕上并占用空间。因此,当您尝试查看他们占用多少空间时,您将获得默认的1个数。