【问题标题】:How to find out the current widget size in tkinter?如何在 tkinter 中找出当前小部件的大小?
【发布时间】:2011-04-26 10:15:12
【问题描述】:

我正在使用 PythonTkinter,我需要知道小部件的当前尺寸(宽度、高度)。

我试过somewidget["width"],但它只返回一个固定值,并且不会在小部件大小发生变化时更新(例如,当窗口调整大小时)。

【问题讨论】:

  • 您确定您的小部件正在调整大小吗?

标签: python tkinter


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2022-06-28
  • 2011-04-12
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
相关资源
最近更新 更多