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

tkinter, pack()을 이용한 위젯 배치

coding-abc.tistory.com 2025. 8. 26. 11:35
반응형

파이썬, tkinter의 pack()을 활용한 몇 가지 위젯 배치 예제를 만들어 봅니다.
pack()은 위젯을 상하좌우 방향으로 자동 배치할 때 유용하고, side, fill, expand 옵션 조합에 따라 다양한 배치 패턴을 만들 수 있습니다.


1. 기본 세로 배치 (기본값: side="top")

import tkinter as tk

root = tk.Tk()

tk.Button(root, text="버튼 1").pack()
tk.Button(root, text="버튼 2").pack()
tk.Button(root, text="버튼 3").pack()

root.mainloop()
tkinter, pack()을 이용한 위젯 배치

특징: 위에서부터 차례로 쌓임.


2. 가로 배치 (side="left")

import tkinter as tk

root = tk.Tk()

tk.Button(root, text="왼쪽").pack(side="left")
tk.Button(root, text="가운데").pack(side="left")
tk.Button(root, text="오른쪽").pack(side="left")

root.mainloop()
tkinter, pack()을 이용한 위젯 배치

특징: 왼쪽에서 오른쪽 방향으로 차례대로 쌓임.


3. 상하좌우 혼합 배치

import tkinter as tk

root = tk.Tk()
root.title("pack() 상하좌우 혼합 배치")
root.geometry("300x200")

tk.Button(root, text="위", bg="lightblue").pack(side="top", fill="x")
tk.Button(root, text="왼쪽", bg="lightgreen").pack(side="left", fill="y")
tk.Button(root, text="오른쪽", bg="lightpink").pack(side="right", fill="y")
tk.Button(root, text="아래", bg="lightyellow").pack(side="bottom", fill="x")

root.mainloop()
tkinter, pack()을 이용한 위젯 배치

특징: 위, 왼쪽, 오른쪽, 아래가 감싸고 중앙이 비어 있음.


4. fill과 expand로 공간 채우기

import tkinter as tk

root = tk.Tk()
root.title("pack() fill & expand")
root.geometry("300x200")

tk.Button(root, text="버튼 1", bg="lightblue").pack(fill="x")
tk.Button(root, text="버튼 2", bg="lightgreen").pack(fill="both", expand=True)
tk.Button(root, text="버튼 3", bg="lightpink").pack(fill="x")

root.mainloop()
tkinter, pack()을 이용한 위젯 배치

특징:

  • fill="x" : 가로로만 채움
  • fill="both", expand=True : 남는 공간을 모두 차지

5. 중첩 Frame과 pack() 조합

import tkinter as tk

root = tk.Tk()
root.title("pack() 중첩 Frame")
root.geometry("300x200")

top_frame = tk.Frame(root, bg="lightgray")
top_frame.pack(fill="x")

bottom_frame = tk.Frame(root, bg="white")
bottom_frame.pack(fill="both", expand=True)

# 상단 프레임 버튼
tk.Button(top_frame, text="위1").pack(side="left", padx=5, pady=5)
tk.Button(top_frame, text="위2").pack(side="left", padx=5, pady=5)

# 하단 프레임 버튼
tk.Button(bottom_frame, text="아래1").pack(side="top", pady=5)
tk.Button(bottom_frame, text="아래2").pack(side="top", pady=5)

root.mainloop()
tkinter, pack()을 이용한 위젯 배치

특징: Frame을 나누어 내부에서 다시 pack()을 적용 → 레이아웃 관리가 훨씬 편리해짐.


 

반응형