2014-01-15 2 views
1

Ttk Treeview (Tk의 프레임에서)와 tk Listbox (Toplevel에서)가 있습니다. 내 의도는 다음을 수행하는 것입니다 : 트 리뷰에서눌려진 마우스가 다른 프레임의 위젯에 들어갔을 때를 감지하는 방법

  1. 마우스 버튼 1을 누른
  2. 이동 마우스가 들어갈 때 목록 상자를 포함하는 최상위 레벨에 포커스를 설정 한 목록 상자
  3. 에 이상 (누른) 마우스

지금은 마우스를 누르지 않은 상태에서 Toplevel의 초점을 설정할 수 있습니다. 나는 .bind("<Enter>")을 사용했다.

.bind("<B1-Motion>")을 사용할 때 나는 눌린 마우스의 움직임을 감지 할 수 있습니다. 하지만 목록에서 마우스를 눌렀을 때만.

.bind("<B1-Enter>")을 사용할 때 어떤 이벤트도 발생하지 않습니다.

다른 곳에서 누른 마우스가 내 목록 상자에 들어가는 것을 어떻게 감지합니까?

답변

3

<B1-Motion>에 바인딩을 설정해야합니다. 그런 다음 콜백에서 winfo_containing 메소드를 사용하여 커서 아래에있는 위젯을 확인할 수 있습니다. 당신은 위젯을 찾을 winfo_containing에 인수로 event.x_rootevent.y_root를 사용할 수 있습니다

self.bind_all("<B1-Motion>", self.on_motion) 
... 
def on_motion(self, event): 
    widget = self.winfo_containing(event.x_root, event.y_root) 
    ... 
+0

아주, 대단히 감사합니다! Btw ... tk GUI 물건을 검색 한 후에는 항상 완벽한 답변을 주신 분이 셨습니다 :). – Sam

관련 문제