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

时间:2017-04-09 12:39:24

标签: python tkinter tk

我有一个程序可以改变tkinter画布上对象的位置,具体取决于窗口的大小。这是有效的,但它会在每个循环中运行,并在有大量对象时显着减慢程序,因为它会删除并重新绘制它们。

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

2 个答案:

答案 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())