[Tkinter] 화면 전환

2020년 09월 10일 by 진아사랑해

    [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=18weight="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=0column=0sticky="nsew")  => 각 프레임을 순서대로 화면에 출력한다.

 

        self.show_frame("StartPage")

 

    def show_frame(selfpage_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__(selfparentcontroller):

        tk.Frame.__init__(self, parent)

        self.controller = controller    => controller는 SampleApp 클래스를 가르킨다

        label = tk.Label(selftext="This is the start page"font=controller.title_font)

        label.pack(side="top"fill="x"pady=10)

 

        button1 = tk.Button(selftext="Go to Page One",

                            command=lambda: controller.show_frame("PageOne")) 

          => 버튼 1이 눌리면 람다함수에 따라 SampleApp.show_frame( ) 함수가 수행된다.

        button2 = tk.Button(selftext="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(selfframe_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__(selfmaster):        => master는 SampleApp 클래스를 가르킴

        tk.Frame.__init__(self, master)

        tk.Label(selftext="Start page"font=('Helvetica'18"bold")).pack(side="top"fill="x"pady=5)

        tk.Button(selftext="Go to page one",

                  command=lambda: master.switch_frame(PageOne)).pack()   => SampleApp.switch_frame()함수를호출

        tk.Button(selftext="Go to page two",

                  command=lambda: master.switch_frame(PageTwo)).pack()


참고) www.it-swarm.dev/ko/python/tkinter%EC%97%90%EC%84%9C-%EB%91%90-%ED%94%84%EB%A0%88%EC%9E%84-%EA%B0%84-%EC%A0%84%ED%99%98/940148842/

 

python — tkinter에서 두 프레임 간 전환

튜토리얼에서 나에게 보여준 것처럼 멋진 GUI를 사용하여 처음 몇 개의 스크립트를 만들었지 만 더 복잡한 프로그램을 위해해야 ​​할 일을 다루지는 않습니다. '시작 메뉴', 시작 화면 및 사용�

www.it-swarm.dev

 

반응형