Tkinter 애플리케이션을 완전한 기능으로 구동하려면 필요에 따라 다양한 위젯을 자유롭게 사용할 수 있습니다. 그런데 개발 과정에서 특정 위젯이 현재 애플리케이션에 존재하는지 여부를 확인해야 하는 경우가 종종 발생합니다. 이럴 때 유용하게 사용할 수 있는 것이 바로 winfo_exists() 메서드입니다.
winfo_exists() 메서드는 확인하고자 하는 위젯 객체에 대해 호출할 수 있으며, 불리언(Boolean) 값을 반환합니다. 반환값이 True(1)이면 해당 위젯이 애플리케이션에 존재한다는 의미이고, False(0)이면 위젯이 존재하지 않는다는 뜻입니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# Tkinter 프레임 인스턴스 생성
win = Tk()
# 창 크기 설정
win.geometry("700x250")
# 위젯 존재 여부를 확인하는 함수 정의
def check_widget():
exists = label.winfo_exists()
if exists == 1:
print("위젯이 존재합니다.")
else:
print("위젯이 존재하지 않습니다.")
# 레이블(Label) 위젯 생성
label = Label(win, text="Hey There! Howdy?", font=('Helvetica 18 bold'))
label.place(relx=.5, rely=.3, anchor=CENTER)
# 위젯 존재 여부를 확인할 버튼 생성
button = ttk.Button(win, text="Check", command=check_widget)
button.place(relx=.5, rely=.5, anchor=CENTER)
win.mainloop()실행 결과
위 코드를 실행하면 레이블 위젯과 버튼이 배치된 창이 화면에 나타납니다. 이 애플리케이션에서는 레이블 위젯의 존재 여부를 직접 확인해 볼 수 있습니다.
버튼 "Check"를 클릭하면 레이블 위젯이 존재하는지 아닌지가 콘솔에 출력됩니다.
위젯이 존재합니다.
정리
winfo_exists() 메서드는 위젯이 파괴(destroy)된 후에도 참조가 남아 있는 상황에서 오류를 방지하고 싶을 때 특히 유용합니다. 예를 들어 동적으로 위젯을 생성·삭제하는 UI를 만들 때, 해당 위젯이 유효한 상태인지 먼저 검사한 후 작업을 수행하면 안정적인 프로그램을 작성할 수 있습니다.