2017-04-09 66 views
0

我有一个程序,根据窗口的大小,改变tkinter画布上的对象的位置。这是有效的,但是它会在每个循环中运行,并在存在大量对象时显着减慢程序速度,因为它会删除并重新绘制它们。有没有办法检查Python Tk窗口中的更改?

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

回答

2

当窗口大小的变化(及其他原因),Tkinter的将触发一个事件<Configure>。您可以绑定到此事件以在小部件更改大小时收到通知。

从官方文件:

A配置事件被发送到窗口每当其大小,位置,或边框宽度的变化,有时,当它在堆叠顺序已经改变位置。

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

例子:

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

你一定要小心,不要小部件的大小从绑定功能变更或者你可能在一个无限循环最终成为当小部件大小调整事件将被触发,调整窗口小部件的大小,这会导致事件被触发,...

0

实际上,可以使用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()) 
相关问题