반응형
파이썬 tkinter: 위젯을 배치할 때 pack(), grid(), place()를 비교하면서 언제 어떤 것을 쓰면 좋은지 정리해 봅니다.
🔹 1. pack()
- 특징: 위젯을 상하좌우로 차례대로 배치
- 장점: 간단한 레이아웃에 적합, 코드가 짧음
- 단점: 복잡한 화면 배치에는 불편
📌 예시:
import tkinter as tk
root = tk.Tk()
btn1 = tk.Button(root, text="위")
btn1.pack(side="top")
btn2 = tk.Button(root, text="아래")
btn2.pack(side="bottom")
btn3 = tk.Button(root, text="왼쪽")
btn3.pack(side="left")
btn4 = tk.Button(root, text="오른쪽")
btn4.pack(side="right")
root.mainloop()

👉 사용할 때: 단순히 위/아래/왼쪽/오른쪽 정렬만 필요할 때.
🔹 2. grid()
- 특징: 행(row), 열(column) 기준으로 배치 (표와 유사)
- 장점: 복잡한 폼(form), 표 구조에 적합
- 단점: 부모 위젯 내에서 pack()과 혼용 불가
📌 예시:
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="이름:").grid(row=0, column=0)
tk.Entry(root).grid(row=0, column=1)
tk.Label(root, text="비밀번호:").grid(row=1, column=0)
tk.Entry(root, show="*").grid(row=1, column=1)
tk.Button(root, text="로그인").grid(row=2, column=0, columnspan=2)
root.mainloop()

👉 사용할 때: 로그인 창, 데이터 입력 폼 등 표 형태 배치가 필요할 때.
🔹 3. place()
- 특징: 좌표(x, y) 또는 비율(relx, rely) 로 배치
- 장점: 원하는 위치에 정확히 배치 가능
- 단점: 창 크기를 변경하면 깨지기 쉬움 (단, 상대좌표 사용 시 해결 가능)
📌 예시:
import tkinter as tk
root = tk.Tk()
root.geometry("300x200")
tk.Button(root, text="버튼1").place(x=50, y=30)
tk.Button(root, text="버튼2").place(relx=0.5, rely=0.5, anchor="center")
root.mainloop()

👉 사용할 때: 그림판 같은 프로그램, 게임 보드, 정밀한 위치 지정이 필요한 경우.
🎯 요약
배치 방식장점단점적합한 경우
pack() | 가장 단순, 코드 짧음 | 복잡한 UI 불편 | 단순 정렬 (메뉴, 툴바) |
grid() | 행/열 구조, 폼 UI에 적합 | place보다 자유도가 낮음 | 로그인창, 데이터 입력창 |
place() | 정확한 좌표/비율 배치 | 창 크기 변경 시 깨지기 쉬움 | 그림판, 게임 UI |
'Python > 파이썬 기초 강의(2024)★' 카테고리의 다른 글
파이썬, tkinter 위젯 배치하기: place() (1) | 2025.08.28 |
---|---|
파이썬: tkinter, grid() 이용한 위젯 배치, rowspan columnspan 셀 병합 (합치기) (8) | 2025.08.27 |
tkinter, pack()을 이용한 위젯 배치 (2) | 2025.08.26 |
파이썬, pip: 패키지 및 라이브러리를 설치하고 관리하기 (2) | 2024.12.18 |
파이썬, 텍스트 파일에 저장하기 읽어오기 (0) | 2024.11.27 |