2017-04-09 58 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()) 
相關問題