Maxima's Lab

[Python, Tkinter] Graphic User Interface (GUI) - Frame(프레임) 생성 본문

Python/GUI (Graphic User Interface)

[Python, Tkinter] Graphic User Interface (GUI) - Frame(프레임) 생성

Minima 2022. 7. 16. 20:11
728x90
SMALL

안녕하세요, 오늘은  Tkinter 모듈을 사용하여, GUI 중 Frame(프레임)을 생성하는 방법에 대해서 알아보겠습니다.

 

다음과 같은 과정을 통해 1개의 윈도우 창 내에 3개의 프레임을 생성해보겠습니다.

 

  1. Window(윈도우) 창을 생성합니다.
  2. Frame() 함수를 통해 Frame 3개를 생성합니다.
  3. 각 Frame 별 3개의 Label를 적용하여 구별합니다.
  4. 최종적으로 3개의 Frame들을 Window(윈도우) 창에 pack 할 때, 각 Frame 별 적당한 간격을 생성합니다

 

from tkinter import *


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

frame_1 = Frame(win, relief="solid", bd=10) 
frame_2 = Frame(win, relief="solid", bd=10)
frame_3 = Frame(win, relief="solid", bd=10)

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

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) 
frame_3.pack(side="left", fill="both", expand=True, padx=5, pady=5) 
            
win.mainloop()

 

 

위의 코드에서 pack() 적용 시 side="left" 옵션을 통해 좌측 부터 Frame을 생성하며, padx=5, pady=5 옵션을 통해 서로 다른 Frame들 간에 x축 방향으로 5 만큼, y축 방향으로 5만큼 간격을 설정합니다. 추가적으로, fill="both", expand=True 옵션을 통해 각 Frame별 padx와 pady를 통해 확보한 영역에 대해 Frame의 크기를 채우고 확장시킵니다.

 

다음은 frame_1에 대해 fill, expand 옵션을 변화함에 적용되는 결과에 대해 알아보겠습니다.

  • fill = "both", expand = False
    : "both"의 의미는 x축과 y축 방향으로 Frame을 모두 채운다는 의미입니다. fill = "x", fill = "y"를 통해 각 축을 기준으로 독립적으로 설정할 수도 있습니다. 추가적으로, expand = True는 사용하지 않는 공간들이 없게 하는 옵션입니다.

from tkinter import *


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

frame_1 = Frame(win, relief="solid", bd=10) 
frame_2 = Frame(win, relief="solid", bd=10)
frame_3 = Frame(win, relief="solid", bd=10)

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

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

 

  • fill = "x", expand = True
    : "x"의 의미는 x축 방향으로 Frame을 모두 채운다는 의미입니다. 
from tkinter import *


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

frame_1 = Frame(win, relief="solid", bd=10) 
frame_2 = Frame(win, relief="solid", bd=10)
frame_3 = Frame(win, relief="solid", bd=10)

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

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

 

  • fill = "both", expand = False (Frame 1개)
from tkinter import *


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

frame_1 = Frame(win, relief="solid", bd=10) 

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

frame_1.pack(side="left", fill="both", expand=False, padx=5, pady=5)
            
win.mainloop()

위의 코드와 같이 expand = False 옵션을 사용하게 되면, 다음과 같이 사용하지 않는 공간들이 발생하게 됩니다.

 

 

하지만, expand = True 옵션을 사용하게 되면, 사용할 수 있는 모든 공간들을 전부 사용하게 됩니다. padx = 5, pady = 5에 대한 공간을 제외하고 나머지 가용 공간들을 모두 사용하는 것을 확인할 수 있습니다.

 

from tkinter import *


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

frame_1 = Frame(win, relief="solid", bd=10) 

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

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

 

 

위의 예제 들은 side = "left" 방향을 기준으로 pack을 적용하였으며, "right", "top", "bottom"을 다앙하게 적용하면서 가용 공간들을 다양하게 사용할 수 있습니다.

 

지금까지, Tkinter 모듈을 사용하여, Graphic User Interface (GUI)의 Frame(프레임)을 생성하는 방법에 대해서 알아보았습니다.

728x90
LIST
Comments