有没有办法检查Python Tk窗口中的更改?

有没有办法检查Python Tk窗口中的更改?,python,tkinter,tk,Python,Tkinter,Tk,我有一个程序,可以根据窗口的大小更改tkinter画布上对象的位置。这是可行的,但它会在每个循环中运行,当有很多对象时,它会删除并重新绘制这些对象,从而大大降低程序的速度 有没有办法检查窗口大小的变化,以便在需要时只需运行一次?实际上,您可以使用w.winfo_height()w.winfo_width()方法以像素为单位获取w的当前高度和宽度。(w可以是任何类型的小部件。) e、 g 实际上,您可以使用w.winfo_height()w.winfo_width()方法以像素为单位获取w的当前高

我有一个程序,可以根据窗口的大小更改tkinter画布上对象的位置。这是可行的,但它会在每个循环中运行,当有很多对象时,它会删除并重新绘制这些对象,从而大大降低程序的速度


有没有办法检查窗口大小的变化,以便在需要时只需运行一次?

实际上,您可以使用
w.winfo_height()
w.winfo_width()
方法以像素为单位获取
w
的当前高度和宽度。(
w
可以是任何类型的小部件。)

e、 g


实际上,您可以使用
w.winfo_height()
w.winfo_width()
方法以像素为单位获取
w
的当前高度和宽度。(
w
可以是任何类型的小部件。)

e、 g


当窗口大小改变(以及其他原因)时,tkinter将触发
事件。您可以绑定到此事件以在小部件更改大小时获得通知

从官方文件:

每当窗口的大小、位置或边框宽度发生变化时,有时当窗口在堆叠顺序中的位置发生变化时,配置事件就会发送到窗口

注意:这适用于所有小部件,而不仅仅是根窗口。例如,您可以绑定到画布小部件或任何其他小部件

例如:

import tkinter as tk

root = tk.Tk()
label = tk.Label(root, width=20)
label.pack(side="top", fill="both", expand=True, padx=20, pady=20)

def handle_configure(event):
    text="window geometry:\n" + root.geometry()
    label.configure(text=text)

root.bind("<Configure>", handle_configure)

root.mainloop()
将tkinter作为tk导入
root=tk.tk()
标签=tk.标签(根,宽度=20)
label.pack(side=“top”,fill=“both”,expand=True,padx=20,pady=20)
def句柄_配置(事件):
text=“窗口几何体:\n”+root.geometry()
label.configure(text=text)
root.bind(“,handle\u configure)
root.mainloop()

您必须小心不要在绑定函数中更改小部件的大小,否则可能会导致无限循环,因为当小部件调整大小时会触发事件,这会调整小部件的大小,从而导致事件被触发,…

当窗口大小改变时(以及由于其他原因),tkinter将触发
事件。您可以绑定到此事件以在小部件更改大小时获得通知

从官方文件:

每当窗口的大小、位置或边框宽度发生变化时,有时当窗口在堆叠顺序中的位置发生变化时,配置事件就会发送到窗口

注意:这适用于所有小部件,而不仅仅是根窗口。例如,您可以绑定到画布小部件或任何其他小部件

例如:

import tkinter as tk

root = tk.Tk()
label = tk.Label(root, width=20)
label.pack(side="top", fill="both", expand=True, padx=20, pady=20)

def handle_configure(event):
    text="window geometry:\n" + root.geometry()
    label.configure(text=text)

root.bind("<Configure>", handle_configure)

root.mainloop()
将tkinter作为tk导入
root=tk.tk()
标签=tk.标签(根,宽度=20)
label.pack(side=“top”,fill=“both”,expand=True,padx=20,pady=20)
def句柄_配置(事件):
text=“窗口几何体:\n”+root.geometry()
label.configure(text=text)
root.bind(“,handle\u configure)
root.mainloop()
您必须小心不要在绑定函数中更改小部件的大小,否则可能会导致无限循环,因为当小部件调整大小时,事件将被触发,从而调整小部件的大小,从而导致事件被触发