2017-04-09 1 views
0

나는 창 크기에 따라 tkinter 캔버스에있는 객체의 위치를 ​​변경하는 프로그램을 가지고있다. 이 기능은 작동하지만 루프마다 실행되며 객체가 많은 경우 프로그램을 빠르게 삭제합니다. 삭제하고 다시 그리는 경우입니다. 이 한 번만 실행해야합니다 있도록Python Tk 창에서 변경 사항을 확인하는 방법이 있습니까?

윈도우의 크기 변화를 확인하는 방법은 될 필요가있을 때,이 있습니까?

답변

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

당신은 바인딩 된 함수 내에서 위젯의 크기를 변경하거나 위젯의 크기를 조정하면 이벤트가 트리거 될 것입니다 당신이 무한 루프에 끝낼 수 있습니다하지 않도록주의해야합니다, 위젯의 크기를 조정하여 이벤트를 트리거합니다.

0

사실, 픽셀 w의 현재 높이와 폭을 얻을 w.winfo_height()w.winfo_width() 방법을 사용할 수있다. (w 어떤 유형의 위젯 수있다.)

예를

from Tkinter import * 
w=Tk() 
w.geometry('400x600') 

w.update() 

print (w.winfo_width()) 
print (w.winfo_height()) 
관련 문제