有没有办法检查 Python Tk windows 的变化?
Is there a way to check for changes in Python Tk windows?
我有一个程序可以根据 window 的大小更改对象在 tkinter canvas 上的位置。这行得通,但它是 运行 每个循环,当有很多对象时,它会显着减慢程序速度,因为它会删除并重新绘制它们。
有没有办法检查 window 大小的变化,以便在需要时只需要 运行 一次?
实际上,您可以使用 w.winfo_height()
w.winfo_width()
方法来获取 w
当前的高度和宽度(以像素为单位)。(w
可以是任何类型的任何小部件.)
例如
from Tkinter import *
w=Tk()
w.geometry('400x600')
w.update()
print (w.winfo_width())
print (w.winfo_height())
当 window 大小发生变化(以及其他原因)时,tkinter 将触发 <Configure>
事件。您可以绑定到此事件以在小部件更改大小时收到通知。
来自官方文档:
A Configure event is sent to a window whenever its size, position, or border width changes, and sometimes when it has changed position in the stacking order.
注意:这适用于所有小部件,而不仅仅是根 window。例如,您可以绑定到 canvas 小部件或任何其他小部件。
示例:
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()
您必须注意不要在绑定函数中更改小部件的大小,否则您可能会陷入无限循环,因为当小部件调整大小时会触发事件,这会调整小部件的大小,从而导致要触发的事件,...
我有一个程序可以根据 window 的大小更改对象在 tkinter canvas 上的位置。这行得通,但它是 运行 每个循环,当有很多对象时,它会显着减慢程序速度,因为它会删除并重新绘制它们。
有没有办法检查 window 大小的变化,以便在需要时只需要 运行 一次?
实际上,您可以使用 w.winfo_height()
w.winfo_width()
方法来获取 w
当前的高度和宽度(以像素为单位)。(w
可以是任何类型的任何小部件.)
例如
from Tkinter import *
w=Tk()
w.geometry('400x600')
w.update()
print (w.winfo_width())
print (w.winfo_height())
当 window 大小发生变化(以及其他原因)时,tkinter 将触发 <Configure>
事件。您可以绑定到此事件以在小部件更改大小时收到通知。
来自官方文档:
A Configure event is sent to a window whenever its size, position, or border width changes, and sometimes when it has changed position in the stacking order.
注意:这适用于所有小部件,而不仅仅是根 window。例如,您可以绑定到 canvas 小部件或任何其他小部件。
示例:
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()
您必须注意不要在绑定函数中更改小部件的大小,否则您可能会陷入无限循环,因为当小部件调整大小时会触发事件,这会调整小部件的大小,从而导致要触发的事件,...