Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 위젯의 포커스 상태를 확인하는 방법 – focus_get() 활용하기

Tkinter 애플리케이션을 개발하다 보면 특정 위젯이 현재 포커스를 가지고 있는지 확인해야 하는 경우가 종종 발생합니다. 이때 가장 확실하게 확인할 수 있는 방법은 focus_get() 메서드를 사용하는 것입니다. 이 메서드는 프로그램 실행 중 현재 포커스가 맞춰져 있는 위젯의 정보를 담은 객체를 반환합니다.

focus_get() 메서드란?

focus_get()은 Tkinter의 Misc 클래스에 포함된 유틸리티 메서드로, 호출 시점에 활성화되어 있는(즉, 포커스를 가진) 위젯 객체를 그대로 반환합니다. 이를 활용하면 실행 중인 프로그램에서 어떤 위젯이 활성 상태인지 손쉽게 파악할 수 있습니다.

예제 코드

다음 예제에서는 Entry 위젯을 생성하고, <Enter> 키를 누르면 해당 위젯이 포커스를 갖도록 설정합니다. 이후 focus_get() 메서드를 통해 현재 활성화된 위젯의 정보를 출력해 보겠습니다.

# Tkinter 라이브러리 임포트
from tkinter import *

# Tkinter 프레임 인스턴스 생성
win = Tk()

# 창 크기 지정
win.geometry("750x250")

# 이벤트 핸들러 정의
def event_show(event):
    label.config(text="Hello World")
    e.focus_set()
    print("focus is:", e.focus_get)

# 라벨 생성
label = Label(win, text="Press Enter", font=('Helvetica 15 underline'))
label.pack()

# 엔트리 위젯 생성
e = Entry(win, width=25)
e.pack(pady=20)

# 함수 바인딩
win.bind('<Return>', lambda event: event_show(event))
win.mainloop()

실행 결과

위 코드를 실행하면 "Press Enter"라는 안내 문구가 담긴 라벨과 입력 필드가 표시된 창이 나타납니다.

Tkinter에서 위젯의 포커스 상태를 확인하는 방법 – focus_get() 활용하기

이제 <Enter> 키를 누르면 셸에 현재 포커스를 가진 위젯의 정보가 다음과 같이 출력됩니다.

focus is : <bound method Misc.focus_get of <tkinter.Entry object .!entry >>

참고 사항

위 예제에서는 e.focus_get을 괄호 없이 출력했기 때문에 메서드 자체(bound method)가 문자열로 출력됩니다. 만약 실제로 포커스를 가진 위젯 객체를 얻고 싶다면 e.focus_get()처럼 괄호를 붙여 메서드를 직접 호출해야 합니다. 이렇게 하면 반환값으로 Entry 위젯 객체 자체를 받게 되어, 해당 위젯의 속성을 조회하거나 조작하는 데 활용할 수 있습니다.

이처럼 focus_get() 메서드를 활용하면 프로그램 실행 중 어떤 위젯이 활성 상태인지 쉽게 추적할 수 있으며, 이는 폼 유효성 검사나 키보드 이벤트 처리 등 다양한 UI 로직을 구현할 때 매우 유용하게 사용됩니다.