실제 데스크톱 애플리케이션을 만들다 보면 사용자가 프로그램의 여러 화면(세그먼트) 사이를 자유롭게 오갈 수 있도록 해야 하는 경우가 많습니다. 이를 구현하는 대표적인 방법 중 하나는 메인 윈도우 안에 여러 개의 프레임(Frame)을 미리 만들어 두고, 상황에 따라 특정 프레임만 보여주는 것입니다.
Tkinter의 Frame 위젯은 애플리케이션 안에서 여러 위젯을 그룹으로 묶어 관리할 때 사용됩니다. 서로 다른 위젯들을 두 개의 개별 프레임에 배치한 뒤, 버튼 클릭 한 번으로 한 프레임에서 다른 프레임으로 전환할 수 있습니다.
예제 소개
이 예제에서는 greet 프레임과 order 프레임이라는 두 개의 독립적인 프레임을 생성합니다. 각 프레임에는 서로 다른 콘텐츠가 담겨 있으며, 윈도우 하단의 버튼을 클릭하면 두 프레임 객체 사이를 자유롭게 전환할 수 있습니다.
전체 예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import font
# tkinter 프레임 또는 윈도우 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry('700x350')
# 윈도우 안에 두 개의 프레임 생성
greet = Frame(win)
order = Frame(win)
# 프레임을 전환하는 함수 정의
def change_to_greet():
greet.pack(fill='both', expand=1)
order.pack_forget()
def change_to_order():
order.pack(fill='both', expand=1)
greet.pack_forget()
# 프레임 간 시각적 차이를 주기 위한 폰트 생성
font1 = font.Font(family='Georgia', size='22', weight='bold')
font2 = font.Font(family='Arial', size='12')
# 각 프레임에 헤딩 텍스트 추가
label1 = Label(greet, text='Hey There! Welcome to TutorialsPoint.', foreground='green3', font=font1)
label1.pack(pady=20)
label2 = Label(order, text='Find all the interesting Tutorials.', foreground='blue', font=font2)
label2.pack(pady=20)
# 두 프레임 사이를 전환하는 버튼 추가
btn1 = Button(win, text='Switch to Greet', font=font2, command=change_to_greet)
btn1.pack(pady=20)
btn2 = Button(win, text='Switch to Order', font=font2, command=change_to_order)
btn2.pack(pady=20)
win.mainloop()
코드 핵심 포인트
- Frame(win) : 메인 윈도우(win)에 속한 새 프레임을 생성합니다. 각 프레임은 자신만의 위젯들을 담는 독립적인 컨테이너 역할을 합니다.
- pack() : 해당 프레임을 화면에 표시합니다.
fill='both'와expand=1옵션을 함께 사용하면 프레임이 윈도우의 가용 공간 전체를 차지하게 됩니다. - pack_forget() : 해당 프레임을 화면에서 제거합니다. 위젯 자체가 삭제되는 것은 아니므로, 다시
pack()을 호출하면 언제든 복원할 수 있습니다. 바로 이 동작 원리가 프레임 전환의 핵심입니다. - command 매개변수 : 버튼이 클릭되었을 때 실행할 함수를 지정합니다. 이때 함수 이름은 괄호 없이 그대로 전달해야 한다는 점에 유의하세요.
실행 결과
위 코드를 실행하면 두 개의 서로 다른 프레임을 포함한 윈도우가 나타납니다.

프레임 아래에 정의된 버튼을 클릭하면 한 화면에서 다른 화면으로 즉시 전환할 수 있습니다.

