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의 속성에 대해 정리하는 시간을 가져봤습니다.