본문 바로가기
Programming/Python_Etc

Tkinter 위젯 배치 스터디 - grid / pack / place

by Wilkyway 2024. 3. 29.
반응형

Tkinter에서 위젯을 화면에 배치하는 방법에는 pack / grid / place의 세가지 방식이 있습니다. grid는 엑셀과 같은 이미지를 떠올리면 될 것 같습니다. 행과 열을 기준으로 위치시키는 방식이고, pack은 상/하/좌/우(동/서/남/북)으로 위치시키는 방식, 그리고 place는 절대좌표계를 이용해서 위치시키는 방식입니다.

 

1. Grid방식

import tkinter as tk

root = tk.Tk()
root.title("GUI Grid위젯배치")
root.geometry("640x480+100+100")
root.resizable(True,True)

bb1 = tk.Button(root, text="(0,0)")
bb1.grid(row=0,column=0)
bb2 = tk.Button(root, text="(0,1)")
bb2.grid(row=0,column=1)
bb3 = tk.Button(root, text="(0,2)")
bb3.grid(row=0,column=2)
bb4 = tk.Button(root, text="(1,0)")
bb4.grid(row=1, columnspan=3, sticky="ew")

root.mainloop()

 

Grid 속성

- 먼저 선언한 Grid부터 배치된다.

- 셀 단위로 배치되며, 한번에 여러 셀을 건너뛰어 배치할 수 없다.

- pack()과 같이 사용할 수 없으며, place()와는 같이 사용할 수 있다.

 

Grid Parameter

Param 의미 기본값 속성
row 행 위치 0  
column 열 위치 0  
rowspan 행 합치기 1  
columnspan 열 합치기 1  
sticky 할당된 공간 내에서 위치 조정. 어디에 고정할 것인가? - n(north), e(east), s(south), w(west)
news와 같이 전방향 고정으로 조합하여 사용 가능
ipadx x방향 내부 패딩 0  
ipady y방향 내부 패딩 0  
padx x방향 외부 패딩 0  
pady y방향 외부 패딩 0  

 

2. Pack방식

Pack은 상하좌우(동서남북) 에 위젯들을 위치시키는 방식입니다.

import tkinter as tk

root = tk.Tk()
root.title("GUI pack 위젯배치")
root.geometry("640x480+100+100")
root.resizable(True,True)

bb1 = tk.Button(root, text="left", width=10)
bb1.pack(side="left", fill="y")
bb2 = tk.Button(root, text="top", width=10)
bb2.pack(side="top")
bb3 = tk.Button(root, text="(right)", width=10)
bb3.pack(side="right")
bb4 = tk.Button(root, text="(bottom)", width=10)
bb4.pack(side="bottom", anchor="n")

root.mainloop()

 

Pack 속성

- 먼저 선언한 pack부터 배치된다.

- pack의 파라미터로 위젯의 크기를 변경할 수 있다.

- grid()와 같이 사용할 수 없으며 place()와는 같이 사용할 수 있다.

 

Pack Parameter

Param 의미 기본값 속성
side 위치(공간)할당 top top, bottom, left, right
anchor 고정 기준 center center, n(north), e(east), s(south), w(west)
news와 같이 전방향 고정으로 조합하여 사용 가능
fill 할당된 공간에 대한 크기 맞춤 none none, x, y, both
expand 미사용 공간 확보 False Boolean
ipadx x방향 내부 패딩 0  
ipady y방향 내부 패딩 0  
padx x방향 외부 패딩 0  
pady y방향 외부 패딩 0  

 

3. place방식

import tkinter as tk

root = tk.Tk()
root.title("GUI Grid위젯배치")
root.geometry("640x480+100+100")
root.resizable(True,True)

bb1 = tk.Button(root, text="(30,30)")
bb1.place(x=30, y=30)
bb2 = tk.Button(root, text="(100,30)")
bb2.place(x=100, y=30)
bb3 = tk.Button(root, text="(30,80)")
bb3.place(x=30, y=80)
bb4 = tk.Button(root, text="(100,80)")
bb4.place(x=100, y=80)

root.mainloop()

 

Place 속성

- 먼저 선언한 요소부터 배치된다.

- place의 절대 위치로 배치되며, 크기를 조정할 수 있다.

- pack(), grid()와 같이 사용할 수 있다.

 

place Parameter

Param 의미 기본값 속성
x x 좌표 0 상수
y y 좌표 0 상수
relx x좌표 배치 비율 0 0~1
rely y좌표 배치 비율 0 0~1
width 위젯 폭 0 상수
height 위젯 높이 0 상수
relwidth 위젯의 상대 너비 0 0~1
relheight 위젯의 상대 높이 0 0~1
anchor 고정 기준 nw n(north), e(east), s(south), w(west)
news와 같이 전방향 고정으로 조합하여 사용 가능

 

 

오늘은 헷갈리지 않도록 grid / pack / place의 속성에 대해 정리하는 시간을 가져봤습니다. 

반응형

댓글