`tk_focusNext`·`tk_focusPrev`·`tk_focusFollowsMouse` — 포커스 순회 유틸리티
tk_focusNext·tk_focusPrev·tk_focusFollowsMouse — 포커스 순회 유틸리티
Tab 키를 누르면 포커스가 다음 위젯으로, Shift-Tab을 누르면 이전 위젯으로 옮겨지는 건 프레임워크가 순서를 관리해 주기 때문이에요. 그 순서 계산과 포커스 모델 변경을 담당하는 유틸리티 프로시저들이 여기 모여 있어요.
본문
시그니처
tk_focusNext window
tk_focusPrev window
tk_focusFollowsMouse
설명
tk_focusNext는 키보드 순회(traversal)에 쓰는 유틸리티 프로시저예요. 포커스 순서에서 window 다음에 오는 "다음" 창을 돌려줘요.
포커스 순서는 창의 쌓임 순서(stacking order)와 창 계층 구조로 결정돼요. 형제들 사이에서는 쌓임 순서와 같고, 가장 아래 창이 먼저예요. 창에 자식이 있으면 그 창을 먼저 방문하고, 이어서 그 자식들을 (재귀적으로), 그다음 그 다음 형제를 방문해요.
window 외의 최상위(top-level) 창은 건너뛰므로, tk_focusNext는 window와 다른 최상위의 창을 돌려주지 않아요.
다음 창을 계산한 뒤 tk_focusNext는 그 창의 -takefocus 옵션을 검사해 건너뛸지 결정해요. 건너뛰어야 하면 포커스 순서의 다음 창으로 계속 넘어가면서, 결국 포커스를 받아들일 창을 찾거나 window로 되돌아와요.
tk_focusPrev는 tk_focusNext와 비슷하지만, 포커스 순서에서 window 바로 앞의 창을 돌려줘요.
tk_focusFollowsMouse는 애플리케이션의 포커스 모델을 암시적 모델로 바꿔서, 마우스 아래 있는 창이 포커스를 받게 해요. 이 프로시저를 호출한 뒤로는 마우스가 창에 들어올 때마다 Tk가 자동으로 그 창에 입력 포커스를 줘요. focus 명령으로 마우스 아래 있는 창이 아닌 다른 창으로 포커스를 옮길 수는 있지만, 마우스가 새 창으로 움직이는 순간 포커스가 그 창으로 다시 튀어요.
참고: 현재는 애플리케이션을 명시적 포커스 모델로 되돌리는 내장 지원이 없어요. 그러려면 tk_focusFollowsMouse가 만든 바인딩을 삭제하는 스크립트를 직접 작성해야 해요.
더 알아보기
focus(입력 포커스 관리), bind, 위젯의 -takefocus 옵션 문서를 함께 보세요.