반응형
tkinter로 화면 전환에 대해서 궁금해 하시는 분들이 많이 있는 것 같습니다.
프로그램들을 실행시키다 보면 이전과 다음을 클릭하도록 되어있는 것을 종종 볼 수 있습니다.
그것과 같이 화면을 전환하는 방법에 대해서 알아보겠습니다.
화면을 전환하려면 우선 각 화면을 만들어야 합니다.
매번 하던 방식은
root = Tk()
Label(root, text="어쩌구" ...
이런 식으로 기본 화면에 만들었는데
이제는 각 화면을 따로따로 만들어주도록 하겠습니다. 그리고 버튼을 통해 이전과 다음 페이지로 넘어 갈 수 있도록 하겠습니다.
화면을 frame이라고 합니다. 그래서 Frame 위젯을 이용해야합니다.
이 Frame으로 각 화면을 만들어주도록 하겠습니다.
from tkinter import *
root = Tk()
root.title("화면 전환~~")
root.geometry("400x300+300+300")
frame1 = Frame(root, width=400, height=200)
frame2 = Frame(root, width=400, height=200)
frame3 = Frame(root, width=400, height=200)
but_frame = Frame(root, width=400, height=100)
root.mainloop()
근데 이렇게 만들기만 하면 나타날 수 없습니다. place, grid, pack 같은 것을 이용해야합니다.
여기서 주의할 점은 맨 먼저 나타나게 할 frame을 코드 상 가장 나중에 나타날 수 있도록 하는 것입니다.
from tkinter import *
root = Tk()
root.title("화면 전환~~")
root.geometry("400x300+300+300")
frame3 = Frame(root, width=400, height=200)
frame2 = Frame(root, width=400, height=200)
frame1 = Frame(root, width=400, height=200)
# 먼저 나올 프레임이 frame1이라서 가장 나중에 만듬
but_frame = Frame(root, width=400, height=100)
frame3.place(x=0, y=0)
frame2.place(x=0, y=0)
frame1.place(x=0, y=0) # 이 프레임이 가장 먼저 나타남
but_frame.place(x=0, y=200) # 밑 바닥에 이전과 다음이 있을 버튼 영역
root.mainloop()
근데 이렇게 하면 화면이 전환 버튼도 안보이고 이게 무슨 프레임이 나온 것인지 보이지 않습니다.
간단한 label과 button을 추가합니다.
from tkinter import *
page = 1 # frame1이 1임, frame2는 2 frame3은 3
def next_frame():
global page, frame1, frame2, frame3
page += 1
if page >= 3:
page = 3
frame3.lift()
elif page == 2:
frame2.lift()
elif page == 1:
frame1.lift()
def prev_frame():
global page, frame1, frame2, frame3
page -= 1
if page <= 1:
page = 1
frame1.lift()
elif page == 2:
frame2.lift()
elif page == 3:
frame3.lift()
root = Tk()
root.title("화면 전환~~")
root.geometry("400x300+300+300")
frame3 = Frame(root, relief='solid', border=2)
frame2 = Frame(root, relief='solid', border=2)
frame1 = Frame(root, relief='solid', border=2)
but_frame = Frame(root, relief='solid', border=2)
frame3.place(x=0, y=0, width=400, height=250)
frame2.place(x=0, y=0, width=400, height=250)
frame1.place(x=0, y=0, width=400, height=250) # 이 프레임이 가장 먼저 나타남
but_frame.place(x=0, y=250, width=400, height=50) # 밑 바닥에 이전과 다음이 있을 버튼 영역
Label(frame3, text="Frame3", font=('consolas', 20)).pack(fill='y')
Label(frame2, text="Frame2", font=('consolas', 20)).pack(fill='y')
Label(frame1, text="Frame1", font=('consolas', 20)).pack(fill='y')
Button(but_frame, text='다음', command=next_frame).pack(side='right')
Button(but_frame, text='이전', command=prev_frame).pack(side='right')
root.mainloop()
화면 전환에 대한 핵심 코드는 함수 부분에 있는 lift 메소드입니다.
어떤 프레임에 대해서 lift 메소드를 사용하면 그 화면으로 전환할 수 있습니다.
화면 전환을 해도 이전에 입력한 값들은 남아있습니다.
도움이 되셨길 바랍니다. 감사합니다.
반응형
'프로그래밍 > 파이썬' 카테고리의 다른 글
육십갑자를 파이썬으로 알아보자!(올해는 계묘년 : 검은 토끼의 해) (2) | 2023.01.05 |
---|---|
[파이썬 GUI] tkinter 6(특정 키를 누를 때 동작하는 bind함수/로그인 창 음영 넣는 법) (0) | 2022.10.28 |
[파이썬 GUI] tkinter 5(입력 위젯 만들기) (2) | 2022.10.26 |
[파이썬 GUI] tkinter 4(버튼 사용하기/버튼의 기능 만들기) (3) | 2022.10.21 |
[파이썬 GUI] tkinter 3(위젯을 화면에 배치하는 방법, pack, grid, place) (0) | 2022.10.14 |
댓글