我正在三个不同的时间读取标签的宽度,只有其中一个产生正确的输出..代码:
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
答案 0 :(得分:2)
嗯,不幸的是,你做不到。前两次在窗口加载之前完成(这导致它返回默认值1
,因为标签尚未绘制)。第三次在加载窗口(绘制标签)后完成,因此返回正确的数字。
您必须记住,在您致电root.mainloop
并加载窗口之前,小部件不会放在屏幕上。当然,它们存在于幕后(否则会抛出NameError
),但它们不在屏幕上并占用空间。因此,当您尝试查看他们占用多少空间时,您将获得默认的1
个数。