我知道我迟到了两年才回答这个问题,但是这个答案肯定可以帮助仍然引用这篇文章的人。
在 tkinter 中,我们有 2 种方法来更新所有挂起的空闲任务,它们是 update() 和 update_idletasks()。下面的代码按预期工作。我使用了 winfo_width() 而不是 winfo_reqwidth()。使用 winfo_reqwidth() 没有错,但我仍然更喜欢使用 winfo_width() 而不是 winfo_reqwidth()。
所以这里的想法是使用可用的两种方法之一来更新空闲挂起的任务 [update(), update_idletasks()]。当这些任务更新时,我们可以调用我们的 winfo_width() 和 winfo_height() 方法来获取准确的值。
from tkinter import *
Root=Tk()
Root.title("Window")
lab = Label(Root, text = "Test")
lab.pack()
Root.geometry("300x300")
Root.update_idletasks()
def check(event):
RWidth = Root.winfo_width()
RHeight = Root.winfo_height()
print(RWidth)
print(RHeight)
Root.bind("<Configure>",check)
mainloop()
update()和update_idletasks()的解释:-
Update 方法处理所有挂起的空闲任务、未访问的事件、调用函数和回调。该方法适用于更新和处理所有的事件或任务,例如重绘widget、几何管理、配置widget属性等。
它还确保如果应用程序有任何待处理的任务,那么它只会更新或刷新影响整个应用程序部分的值。对单个待处理任务使用更新会很讨厌,因此 Tkinter 还提供了 update_idletasks() 方法。它仅更新由于某种原因在应用程序中稳定或未更新的空闲挂起任务。它调用所有待处理的事件而不处理任何其他事件或回调。
update() 和 update_idletask() 方法对于处理任何挂起或空闲的任务很有用。然而,update() 和 update_idletasks() 的唯一区别是 update() 处理应用程序中存在的所有事件,而 update_idletasks() 只处理那些未运行或不稳定的事件。