다른 Python GUI 라이브러리와 달리 Tkinter는 완성도 높은 애플리케이션을 개발할 수 있는 다양한 기능을 제공합니다. 여러 개의 창을 동시에 관리하는 기능뿐만 아니라 스레딩(threading)을 지원하여 각 창에서 발생하는 작업을 효율적으로 처리할 수 있습니다.
이번 글에서는 메인(부모) 창에서 입력된 데이터를 가져와 자식 창으로 전달하는 애플리케이션을 만들어 보겠습니다. Tkinter에서 자식 창은 흔히 '대화 상자(Dialog Box)'라고 불리며, 특정 이벤트가 발생했을 때 사용자에게 추가 정보를 보여주는 용도로 활용됩니다.
자식 창 생성 방법
Tkinter에서 자식 창을 만드는 방법은 매우 간단합니다. Toplevel(root) 생성자를 사용하면 부모 창 위에 새로운 독립적인 창을 손쉽게 열 수 있습니다. Toplevel 창은 부모 창과 별개로 제목, 크기, 위젯 등을 자유롭게 구성할 수 있으며, 부모 창이 닫히면 함께 종료됩니다.
예제 코드
아래 예제에서는 메인 창에 입력 필드(Entry 위젯)와 버튼을 배치합니다. 버튼을 클릭하면 Entry 위젯에 저장된 값을 읽어와 새로운 자식 창에 표시하고, 원래의 메인 창은 화면에서 숨깁니다(withdraw).
# tkinter 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# tkinter 프레임(창) 인스턴스 생성
win = Tk()
# 프레임 크기 설정
win.geometry("750x250")
win.title("Main Window")
# 새 창을 여는 함수 정의
def open_win():
child_win = Toplevel(win)
child_win.title("Child Window")
child_win.geometry("750x250")
content = entry.get()
Label(child_win, text=content, font=('Bell MT', 20, 'bold')).pack()
win.withdraw()
# Entry 위젯 생성
entry = ttk.Entry(win, width=40)
entry.pack(ipady=4, pady=20)
# 메인 창에 버튼 생성
button = ttk.Button(win, text="OK", command=open_win)
button.pack(pady=20)
win.mainloop()실행 결과
위 코드를 실행하면 입력 필드와 'OK' 버튼이 포함된 메인 창이 나타납니다.

입력 필드에 원하는 텍스트를 작성한 후 OK 버튼을 클릭해 보세요.

그러면 메인 창은 숨겨지고, 입력한 값이 자식 창에 그대로 출력되는 것을 확인할 수 있습니다. 이처럼 Toplevel과 withdraw() 메서드를 조합하면 부모-자식 창 간의 화면 전환과 데이터 전달을 간단하게 구현할 수 있습니다.