如何在 tkinter 中找出当前小部件的大小?
Posted
技术标签:
【中文标题】如何在 tkinter 中找出当前小部件的大小?【英文标题】:How to find out the current widget size in tkinter? 【发布时间】:2011-04-26 10:15:12 【问题描述】:我正在使用 Python 和 Tkinter,我需要知道小部件的当前尺寸(宽度、高度)。
我试过somewidget["width"]
,但它只返回一个固定值,并且不会在小部件大小发生变化时更新(例如,当窗口调整大小时)。
【问题讨论】:
您确定您的小部件正在调整大小吗? 【参考方案1】:使用somewidget.winfo_width()
和somewidget.winfo_height()
获取实际的小部件大小,somewidget['width']
属性只是给几何管理器的提示。
【讨论】:
我认为您的意思是“几何管理器”,而不是“窗口管理器”。谢谢! 根据this answer 实际 表示在mainloop()
调用之后。这反过来意味着,如果想要调试小部件的大小,则必须将print
语句放在事件循环(回调)中的某处,或者将信息放在一些小部件(如标签)上并读取它。如果您考虑一下,这是合乎逻辑的,但我想旧的程序习惯无论如何都会起作用。
别忘了在下面查看 Apostolos 的答案 :)【参考方案2】:
somewidget.winfo_width()
和 somewidget.winfo_height()
给出 1。在获取这些值之前,您需要更新 Tk(问题 tk.update()
)。
【讨论】:
最重要的是,我浪费了很多时间调试这个 我只能再说一遍经典的调试东西,真的这应该是公认的答案。 听起来是个好主意,我得到了“1”。但我们实际上做了什么?什么是更新 Tk(发出 tk.update()) @John,tk.update()
更新了到目前为止对 Tkinter 所做的更改。初始化Tkinter后设置新的宽高(用tk = Tk()
或root = Tk()
等)就是这样的变化。
@Apostolos,是的,谢谢,我想我正在慢慢开始明白它......我发现调用 widget.update() 足以获得真正的宽度而不是令人费解的1'。我猜 tk.update() 会刷新所有“过时”的小部件(无论这意味着什么......,我在某处读过它......?),而 widget.update() 也同样如此小部件。我担心 tk 本身会有一些令人费解的变化,这很难理解。【参考方案3】:
您可以使用函数somewidget.winfo_reqheight()
获取高度和somewidget.winfo_reqwidth()
获取宽度,但首先不要忘记调用您想知道尺寸的小部件的更新函数somewidget.update()
。如果不调用更新函数会得到默认值1
。
【讨论】:
补充一点,如果你的tkinter.Toplevel
父元素(通常从 tkinter.Tk()
生成)因为它是 iconify()
-ed 或 withdraw()
-n 而不可见,你也将只得到1
,直到你deiconify()
和update()
顶部窗口。
在顶层窗口上,没有 .update(),我只使用 .winfo_reqwidth 或 .winfo_reqheight() 我得到了小部件的大小。我使用 Python 3.9以上是关于如何在 tkinter 中找出当前小部件的大小?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改标签小部件中的文本大小,python tkinter [重复]
如何在字体更改时停止 Tkinter Text 小部件调整大小?