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

Tkinter의 focus와 focus_set() 메서드 차이점 완벽 정리

Tkinter에서 포커스(Focus)란?

포커스(Focus)는 현재 사용자의 입력(키보드, 마우스 등)을 받아들이고 있는 위젯 또는 창을 의미합니다. Tkinter에서 위젯은 마우스 이동을 제한하거나, 포커스를 강제로 가져오거나(grab), 지정된 범위를 벗어나는 키 입력을 차단하는 용도로 활용될 수 있습니다.

하지만 특정 위젯에 직접 포커스를 부여하여 입력 상태를 활성화하고 싶다면 focus_set() 메서드를 사용해야 합니다. 참고로 focus() 메서드는 사실상 focus_set()과 동일하게 동작하며, 두 이름이 혼용되어 불립니다.

focus_set() 메서드의 동작 방식

focus_set()은 해당 위젯이 속한 창(window)이나 위젯 자체가 포커스를 받을 때, 그 위젯에 포커스를 설정하는 역할을 합니다. 예를 들어 프로그램 시작 시 특정 입력 필드에 커서가 자동으로 위치하도록 하거나, 버튼 클릭 시 다른 위젯으로 포커스를 옮기는 기능을 구현할 때 유용합니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk

# tkinter 프레임 또는 윈도우 인스턴스 생성
win = Tk()

# 윈도우 크기 설정
win.geometry("700x350")

# 포커스를 설정하는 함수 정의
def set_focus():
    entry.focus_set()

# Entry 위젯 생성
entry = Entry(win, width=35)
entry.pack()

# 위젯에 포커스를 설정하는 버튼 생성
ttk.Button(win, text="Set Focus", command=set_focus).pack()

win.mainloop()

실행 결과

위 코드를 실행하면 버튼과 Entry(입력 필드) 위젯이 배치된 창이 나타납니다. "Set Focus" 버튼을 클릭하면 set_focus() 함수가 호출되어 Entry 위젯에 포커스가 설정되며, 별도의 마우스 클릭 없이 곧바로 텍스트를 입력할 수 있게 됩니다.

Tkinter의 focus와 focus_set() 메서드 차이점 완벽 정리

추가 팁: 포커스 관련 메서드들

포커스를 다룰 때 유용하게 쓸 수 있는 관련 메서드도 함께 알아두면 좋습니다.

  • focus_get(): 현재 포커스를 가지고 있는 위젯을 반환합니다.
  • focus_force(): 창이 활성화되지 않은 상태라도 강제로 포커스를 설정합니다.
  • focus_displayof(): 현재 포커스를 가진 위젯이 속한 디스플레이 정보를 반환합니다.

일반적인 상황에서는 focus_set()만으로 충분하지만, 창이 백그라운드에 있는 경우에도 포커스를 강제로 이동시켜야 하는 특수한 경우에는 focus_force()를 고려할 수 있습니다.