Maxima's Lab

[Python, Tkinter] Graphic User Interface (GUI) - 버튼을 이용한 윈도우 창 생성 및 닫기 본문

Python/GUI (Graphic User Interface)

[Python, Tkinter] Graphic User Interface (GUI) - 버튼을 이용한 윈도우 창 생성 및 닫기

Minima 2022. 7. 18. 23:15
728x90
SMALL

안녕하세요, 오늘은 Tkinter 모듈을 사용하여, GUI 중 버튼을 이용하여 윈도우 창을 생성 및 닫는 방법에 대해서 알아보겠습니다.

 

다음과 같은 과정을 통해 1개의 윈도우 창을 기준으로 새로운 윈도우 창을 생성 및 닫는 코드를 구현해보겠습니다.

 

  1. 최초 Window(윈도우) 창을 생성하며, 해당 윈도우 창은 Frame-1, Frame-2와 같이 2개의 Frame으로 구성합니다.
  2. Frame-2를 기준으로 New Window가 생성되지 않은 상태에서는 Red, 생성된 상태에서는 Green으로 Background Color를 설정합니다.
  3. Frame-1 내부에 2개의 Button(버튼)을 사용하여, New Window와 Destroy New Window 기능을 적용합니다.

 

from tkinter import *


win = Tk()
win.title("Maxima")
win.geometry("800x600+200+200")
win.resizable(False, False)

new_win = None

frame_1 = Frame(win, relief="solid", bd=10) 
frame_2 = Frame(win, relief="solid", bd=10)
frame_2.config(bg='red')

label_1 = Label(frame_1, text='Frame-1')
label_2 = Label(frame_2, text='Frame-2')
label_1.pack(); label_2.pack()

def new_window():
    global new_win
    frame_2.config(bg='green')
    new_win = Tk()
    new_win.title("Maxima_2")
    new_win.geometry("800x600+1000+200")
    new_win.resizable(False, False)
    new_win.mainloop()
    
def destroy_new_window():
    global new_win
    frame_2.config(bg='red')
    new_win.destroy()

button_1 = Button(frame_1, text="New Window", height=10, command=new_window)
button_2 = Button(frame_1, text="Destroy New Window", height=10, command=destroy_new_window)

button_2.pack(side="bottom", fill="x", expand=True)
button_1.pack(side="bottom", fill="x", expand=True)

frame_1.pack(side="left", fill="both", expand=True, padx=5, pady=5)
frame_2.pack(side="left", fill="both", expand=True, padx=5, pady=5)

            
win.mainloop()

 

Window(윈도우) 창 생성 초기 화면

 

위의 그림은 해당 코드를 실행하였을 때의 Window(윈도우) 창 생성 초기 화면입니다. 다음은, 위의 코드를 세부적으로 살펴보겠습니다.

 

from tkinter import *


win = Tk()
win.title("Maxima")
win.geometry("800x600+200+200")
win.resizable(False, False)

new_win = None

frame_1 = Frame(win, relief="solid", bd=10) 
frame_2 = Frame(win, relief="solid", bd=10)
frame_2.config(bg='red')

label_1 = Label(frame_1, text='Frame-1')
label_2 = Label(frame_2, text='Frame-2')
label_1.pack(); label_2.pack()

 

최초에 생성되는 Window(윈도우) 창에 Frame-1, Frame-2을 설정하고, Label 1, 2를 사용하여 각 Frame에 대응시켜 주었습니다.

이어서, New Window(윈도우) 창을 생성하고 New Window(윈도우) 창을 닫는 함수들에 대해서 알아보겠습니다.

 

def new_window():
    global new_win
    frame_2.config(bg='green')
    new_win = Tk()
    new_win.title("Maxima_2")
    new_win.geometry("800x600+1000+200")
    new_win.resizable(False, False)
    new_win.mainloop()
    
def destroy_new_window():
    global new_win
    frame_2.config(bg='red')
    new_win.destroy()

 

  • new_window() 함수를 실행 시 전역 변수 new_win을 선언하여 사용하며, Frame-2의 Background Color를 Green으로 설정합니다. 해당 전역 번수를 이용하여 New Window(윈도우) 창을 생성할 때, 2개의 서로 다른 Window(윈도우) 창들이 겹치지 않도록 new_win.geometry("800x600+100+200")로 설정해주었습니다.

 

  • destroy_new_window() 함수를 실행 시 마찬가지로 전역 변수 new_win을 선언하여 사용하였으며, Frame-2 Background Color를 Red로 설정하였습니다. 실제로 해당 New Window(윈도우) 창을 닫을 때에는 new_win.destroy()를 이용하였습니다.

 

New Window 버튼을 사용하여 New Window(윈도우) 창을 생성한 화면은 다음과 같습니다.

 

New Window 버튼을 눌렀을 때의 화면

 

다음은 생성된 New Window(윈도우) 창에 대하여, Destroy New Window 버튼을 눌렀을 때의 화면입니다.

Destroy New Window 버튼을 눌렀을 때의 화면

 

전체 코드에서도 보셨듯이, 변수 new_window에 대하여, new_window(), destroy_new_window() 함수 내 전역 변수를 선언했다는 점을 유의하셔서 코드를 구현해주시기 바랍니다.

 

지금까지, Tkinter 모듈을 사용하여, Graphic User Interface (GUI)의 버튼을 사용하여 New Window(윈도우) 창을 생성하고 닫는 방법에 대해서 알아보았습니다. 

728x90
LIST
Comments