【发布时间】:2011-04-26 10:15:12
【问题描述】:
我正在使用 Python 和 Tkinter,我需要知道小部件的当前尺寸(宽度、高度)。
我试过somewidget["width"],但它只返回一个固定值,并且不会在小部件大小发生变化时更新(例如,当窗口调整大小时)。
【问题讨论】:
-
您确定您的小部件正在调整大小吗?
我正在使用 Python 和 Tkinter,我需要知道小部件的当前尺寸(宽度、高度)。
我试过somewidget["width"],但它只返回一个固定值,并且不会在小部件大小发生变化时更新(例如,当窗口调整大小时)。
【问题讨论】:
使用somewidget.winfo_width() 和somewidget.winfo_height() 获取实际的小部件大小,somewidget['width'] 属性只是给几何管理器的提示。
【讨论】:
mainloop() 调用之后。这反过来意味着,如果想要调试小部件的大小,则必须将print 语句放在事件循环(回调)中的某处,或者将信息放在一些小部件(如标签)上并读取它。如果您考虑一下,这是合乎逻辑的,但我想旧的程序习惯无论如何都会起作用。
somewidget.winfo_width() 和 somewidget.winfo_height() 给出 1。在获取这些值之前,您需要更新 Tk(问题 tk.update())。
【讨论】:
tk.update() 更新了到目前为止对 Tkinter 所做的更改。初始化Tkinter后设置新的宽高(用tk = Tk()或root = Tk()等)就是这样的变化。
您可以使用函数somewidget.winfo_reqheight() 获取高度和somewidget.winfo_reqwidth() 获取宽度,但首先不要忘记调用您想知道尺寸的小部件的更新函数somewidget.update()。如果不调用更新函数会得到默认值1。
【讨论】:
tkinter.Toplevel 父元素(通常从 tkinter.Tk() 生成)因为它是 iconify()-ed 或 withdraw()-n 而不可见,你也将只得到1,直到你deiconify()和update()顶部窗口。