애플리케이션에서 탭(Tab) 순서는 사용자가 Tab 키를 누를 때 어떤 요소가 포커스를 받게 될지를 결정하는 중요한 개념입니다. Tkinter 애플리케이션 역시 마찬가지로, 다음에 포커스를 받아야 할 위젯(widget)을 지속적으로 추적하며 탐색 순서를 관리합니다.
Tkinter에서 탭 순서를 변경하려면 모든 위젯을 리스트로 묶어 lift() 메서드를 호출하는 함수를 정의하면 됩니다. lift() 메서드는 위젯의 쌓기 순서(stacking order)를 조정하기 때문에, 이를 활용하면 프로그래밍 방식으로 특정 위젯에 포커스가 이동하는 순서를 자유롭게 제어할 수 있습니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
# Tkinter 프레임 인스턴스 생성
win = Tk()
# 프레임 크기 설정
win.geometry("700x350")
# 엔트리(Entry) 위젯 추가
e1 = Entry(win, width=35, bg='#ac12ac', fg='white')
e1.pack(pady=10)
e2 = Entry(win, width=35)
e2.pack(pady=10)
e3 = Entry(win, width=35, bg='#aa23dd', fg='white')
e3.pack(pady=10)
# 탭 순서 변경 함수
def change_tab():
widgets = [e3, e2, e1]
for widget in widgets:
widget.lift()
# 탭 순서를 변경하는 버튼 생성
Button(win, text="Change Order", font=('Helvetica 11'), command=change_tab).pack()
win.mainloop()실행 결과
위 코드를 실행하면 세 개의 Entry 위젯과 "Change Order" 버튼이 배치된 창이 나타납니다. 버튼을 클릭하면 change_tab() 함수가 호출되어 위젯들의 쌓기 순서가 재배열되고, 그 결과 탭 키를 눌렀을 때 포커스가 이동하는 순서도 함께 변경됩니다.

추가 팁: focus_set() 활용하기
특정 위젯에 즉시 포커스를 주고 싶다면 lift() 대신 focus_set()(또는 focus_force()) 메서드를 사용할 수도 있습니다. 예를 들어 e1.focus_set()을 호출하면 해당 Entry 위젯에 커서가 바로 위치하게 되어, 사용자가 별도의 클릭 없이 입력을 시작할 수 있습니다. 두 방법을 상황에 맞게 조합하면 더욱 직관적인 키보드 내비게이션 환경을 구축할 수 있습니다.