Python/파이썬 기초 강의(2024)★

파이썬 tkinter: pack(), grid(), place() 위젯 배치 비교 요약

coding-abc.tistory.com 2025. 8. 30. 07:42
반응형
 

파이썬 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()
 
tkinter: pack(), grid(), place() 위젯 배치 비교

 

👉 사용할 때: 단순히 위/아래/왼쪽/오른쪽 정렬만 필요할 때.

 


 

🔹 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()
tkinter: pack(), grid(), place() 위젯 배치 비교
 

👉 사용할 때: 로그인 창, 데이터 입력 폼 등 표 형태 배치가 필요할 때.

 


🔹 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()
tkinter: pack(), grid(), place() 위젯 배치 비교
 

👉 사용할 때: 그림판 같은 프로그램, 게임 보드, 정밀한 위치 지정이 필요한 경우.

 


🎯 요약

배치 방식장점단점적합한 경우
pack() 가장 단순, 코드 짧음 복잡한 UI 불편 단순 정렬 (메뉴, 툴바)
grid() 행/열 구조, 폼 UI에 적합 place보다 자유도가 낮음 로그인창, 데이터 입력창
place() 정확한 좌표/비율 배치 창 크기 변경 시 깨지기 쉬움 그림판, 게임 UI