在tkinter中,为什么winfo_height()总是返回1?

13

这是最简单的例子。

#py3
from tkinter import *
tk = Tk()
canvas = Canvas(tk, width= 500 , height = 400)
canvas.winfo_height()
#In [4]: canvas.winfo_height()
#Out[4]: 1

请查看此链接 https://mail.python.org/pipermail/tkinter-discuss/2013-April/003422.html - Mikhail Gerasimov
2个回答

13
如果使用pack()函数无法生效,您可以尝试在使用canvas.pack()之后添加canvas.update()

12

在获取画布元素的高度之前,您必须将其打包到窗口中。返回的高度是真实的高度。

>>> from tkinter import * 
>>> tk = Tk()
>>> canvas = Canvas(tk, width= 500 , height = 400)
>>> canvas.winfo_height()
1
>>> canvas.pack()
>>> canvas.winfo_height()
402

9
再严谨一些,您需要通过pack、place、grid或将它嵌入文本小部件或画布来使其可见。并且您必须通过调用update或让mainloop工作来在屏幕上绘制窗口。 - Bryan Oakley
这是一个非常特殊的情况,但我遇到了一个问题,即在删除了子小部件并且几何管理器重新调整了框架大小后,无法获取winfo_width。使用bbox解决了这个问题,因为它仍然能够在框架几何调整之前和之后获取大小。 - Mattamue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接