반응형
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의 속성에 대해 정리하는 시간을 가져봤습니다.
반응형
'Programming > Python_Etc' 카테고리의 다른 글
파이썬 turtle 라이브러리 (0) | 2024.04.02 |
---|---|
Tkinter 위젯 배치 스터디 - frame (0) | 2024.04.02 |
Tkinter 기본 활용 (1) | 2024.03.28 |
파이썬 데이터분석 1 openpyxl로 엑셀 다루기 (0) | 2023.07.14 |
파이썬보다 35,000배 빠른 언어 모조 (Mojo) (0) | 2023.07.13 |