- [Tkinter] 화면 전환 목차
화면을 전환 시키는 방법에는 일반적으로 2가지가 있다
화면을 stack처럼 쌓아서 처리하는 방볍과 frame을 destory한 다음에 새로운 프레임을 그리는 방법이다.
1. stack 처럼 처리하는 방법
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.title_font = tkfont.Font(family='Helvetica', size=18, weight="bold", slant="italic")
가장 기본적인 화면으로 container라는 이름으로 기본 프레임을 선언한다.
이 기본 프레임위에 다른 프레임들이 쌓아진다.
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
self.frames = {} => 프레임들을 저장할 set를 선언한다
for F in (StartPage, PageOne, PageTwo): => 선언된 페이지(class)는 3개로서 아래의 일을 각 class 마다 한다
page_name = F.__name__ => 각 class의 이름을 가져와서 저장한다
frame = F(parent=container, controller=self) => class의 _init_를 실행한다
self.frames[page_name] = frame => 각 class별 저장소에 각 class별 frame의 내용을 저장한다
frame.grid(row=0, column=0, sticky="nsew") => 각 프레임을 순서대로 화면에 출력한다.
self.show_frame("StartPage")
def show_frame(self, page_name):
'''Show a frame for the given page name'''
frame = self.frames[page_name]
frame.tkraise() => 요청된 page_name에 맞는 frame을 찾아서 tkraise() 함수로 맨 위에 올려 화면에 보이게 함
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller => controller는 SampleApp 클래스를 가르킨다
label = tk.Label(self, text="This is the start page", font=controller.title_font)
label.pack(side="top", fill="x", pady=10)
button1 = tk.Button(self, text="Go to Page One",
command=lambda: controller.show_frame("PageOne"))
=> 버튼 1이 눌리면 람다함수에 따라 SampleApp.show_frame( ) 함수가 수행된다.
button2 = tk.Button(self, text="Go to Page Two",
command=lambda: controller.show_frame("PageTwo"))
button1.pack()
button2.pack()
2. 화면(통상적 frame)을 없애고 새로 만드는 방법
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(StartPage)
def switch_frame(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame => 기존 프레임을 제거한다
self._frame.pack() => 전달받은 새로운 프레임을 화면에 출력한다.
class StartPage(tk.Frame):
def __init__(self, master): => master는 SampleApp 클래스를 가르킴
tk.Frame.__init__(self, master)
tk.Label(self, text="Start page", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
tk.Button(self, text="Go to page one",
command=lambda: master.switch_frame(PageOne)).pack() => SampleApp.switch_frame()함수를호출
tk.Button(self, text="Go to page two",
command=lambda: master.switch_frame(PageTwo)).pack()
python — tkinter에서 두 프레임 간 전환
튜토리얼에서 나에게 보여준 것처럼 멋진 GUI를 사용하여 처음 몇 개의 스크립트를 만들었지 만 더 복잡한 프로그램을 위해해야 할 일을 다루지는 않습니다. '시작 메뉴', 시작 화면 및 사용�
www.it-swarm.dev
'python & 라즈베리파이' 카테고리의 다른 글
[tkinter] change_img() takes 0 positional arguments but 1 was given (0) | 2020.09.17 |
---|---|
[tkinter] canvas 이미지 위에 text 출력하기 (0) | 2020.09.14 |
[Python] Tkinter의 Canvas 사용 (0) | 2020.08.27 |
[tkinter] 그림파일 출력 방법 (0) | 2020.08.27 |
[tkinter] Button 및 Button Event 처리 (0) | 2020.08.25 |