我有一个程序可以改变tkinter画布上对象的位置,具体取决于窗口的大小。这是有效的,但它会在每个循环中运行,并在有大量对象时显着减慢程序,因为它会删除并重新绘制它们。
有没有办法检查窗口大小的变化,以便它只需要运行一次,何时需要?
答案 0 :(得分:2)
当窗口大小发生变化时(以及其他原因),tkinter将触发<Configure>
事件。您可以绑定到此事件以在窗口小部件更改大小时收到通知。
来自官方文件:
只要配置事件的大小,位置或边框宽度发生变化,有时会在堆叠顺序中更改位置时,就会将其发送到窗口。
注意:对于所有小部件都是如此,而不仅仅是根窗口。例如,您可以绑定到画布小部件或任何其他小部件。
示例:
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()
您必须注意不要在绑定函数中更改窗口小部件的大小,否则您可能最终处于无限循环中,因为当窗口小部件调整大小时将触发事件,这会调整窗口小部件的大小,从而导致事件发生被触发,......
答案 1 :(得分:0)
实际上,您可以使用w.winfo_height()
w.winfo_width()
方法获取w
的当前高度和宽度(以像素为单位)。w
可以是任何类型的任何窗口小部件。)
e.g。
from Tkinter import *
w=Tk()
w.geometry('400x600')
w.update()
print (w.winfo_width())
print (w.winfo_height())