2017-12-29 28 views
1

창 크기가 변경 될 때마다 이전 위젯 (here)에 위젯의 크기를 가져 오는 것에 대한 질문이있었습니다.Tkinter 3.x에서 캔버스/위젯 크기 얻기

링크 된 질문과 답변은 완벽하게 작동하지만, 후속 질문이 있습니다. 슬프게도 내 계정이 매우 새롭기 때문에 슬프게도 의견을 게시 할 수 없습니다!

내 질문은; 내 전체 코드는 다음과 같습니다

event.width 

event.widget.winfo_width() 

: 사이의 효과 차이는 무엇인가.

from tkinter import * 

root = Tk() 

display = Canvas(root, width=300, height=300, background="bisque") 
display.pack(fill="both", expand=True) 

display.create_text(10, 15, anchor="w", tags=["events"]) 
display.create_text(10, 30, anchor="w", tags=["winfos"]) 


def show_dims(event): 
    display.itemconfigure("events", text="event.width: {0}, event.height: {1}".format(event.width, event.height)) 
    display.itemconfigure("winfos", text="winfo_width: {0}, winfo_height: {1}".format(event.widget.winfo_width(), event.widget.winfo_height())) 

display.bind("<Configure>", show_dims) 

root.mainloop() 

내가 알 수있는 한, 코드는 완벽하게 작동합니다. 창 크기가 변경되면 "< Configure>"이벤트는 show_dims 함수를 호출합니다.이 함수는 표시된 텍스트를 업데이트하여 픽셀의 현재 폭과 높이를 픽셀로 표시합니다.

창 크기를 동일하게 만드는 두 가지 방법이 있습니까? 어떤 이유로 든 더 낫지 않습니까?

감사합니다,

답변

1

event 문서를 보면 :

width - width of the exposed window (Configure, Expose)

그래서 특정 경우에, event.widthevent.widget.winfo_width()은 항상 동일하다.

그러나 다른 이벤트와

:

from tkinter import * 

root = Tk() 
d = Label(root, width=50, height=50, text="HI") 
d.pack(expand=True) 

def check(event): 
    print(event.width) 
    print(event.widget.winfo_width()) 

d.bind("<1>", check) 
root.mainloop() 

이 코드가 표시됩니다 이벤트가 Configure 또는 Expose 경우를 제외하고

?? 
456 

는 그래서 winfo 방법을 사용할 수 있어야합니다. event.width은 아마도 클라이언트에게 더 읽기 쉽습니다.

+0

안녕하세요, Rassar, 답장을 보내 주셔서 감사합니다. 그래서 내가 제대로 이해하는 경우 : 이벤트가 다른 것 인 경우 바인딩되는 이벤트는 'Configure' 또는'Expose'이 만, 다음 중 하나를 사용할 수 있습니다 (그러나'event.width' 더 읽을 수) 경우 ,'winfo'가 사용되어야합니다. 대체로 보편적으로 사용할 수있는 방법과 다른 점을 제공하지 않는 특정 경우에만 사용할 수있는 방법을 사용하는 것이 약간 중복 된 것처럼 보입니다. 나는 이것을 이해하려고 더 멀리 문서를 읽을 것이다. 감사합니다. Will –

+1

@WilliamPulford : _ "특정 경우에만 사용할 수있는 방법을 사용하는 것이 약간의 번거 로움"_ _'event.width'는 메소드가 아니며 속성입니다 개체에. –