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

파이썬: tkinter, grid() 이용한 위젯 배치, rowspan columnspan 셀 병합 (합치기)

coding-abc.tistory.com 2025. 8. 27. 17:13
반응형

tkinter에서 grid()는 위젯을 행(row), 열(column) 단위로 배치할 때 사용하는 메서드입니다.
엑셀 표처럼 격자(Grid) 개념으로 배치할 수 있어서 pack()보다 직관적일 때가 많습니다.


📌 기본 문법

위젯.grid(row=행번호, column=열번호, 옵션...)
 
  • row : 배치할 행 번호 (0부터 시작)
  • column : 배치할 열 번호 (0부터 시작)
  • rowspan : 위젯이 차지할 행의 개수
  • columnspan : 위젯이 차지할 열의 개수
  • sticky : 셀 안에서 위젯의 정렬 (N, S, E, W 조합)
  • padx, pady : 셀 안에서 여백

📌 간단 예제

import tkinter as tk

root = tk.Tk()
root.title("grid() 예제")

# 레이블
label1 = tk.Label(root, text="아이디:")
label2 = tk.Label(root, text="비밀번호:")

# 입력창
entry1 = tk.Entry(root)
entry2 = tk.Entry(root, show="*")

# 버튼
btn_login = tk.Button(root, text="로그인")
btn_cancel = tk.Button(root, text="취소")

# Grid 배치
label1.grid(row=0, column=0, padx=5, pady=5, sticky="e")   # 오른쪽 정렬
entry1.grid(row=0, column=1, padx=5, pady=5)

label2.grid(row=1, column=0, padx=5, pady=5, sticky="e")
entry2.grid(row=1, column=1, padx=5, pady=5)

btn_login.grid(row=2, column=0, padx=5, pady=5, sticky="we")
btn_cancel.grid(row=2, column=1, padx=5, pady=5, sticky="we")

root.mainloop()
 

📌 실행 화면 (텍스트 표현)

tkinter, grid() 이용한 위젯 배치
 
  • sticky="e" : 동쪽(East, 오른쪽) 정렬
  • sticky="we" : 좌우로 늘어나게 배치

📌 rowspan / columnspan 예제

 이번에는 rowspan, columnspan을 사용해서 셀 합치기(병합) 예제입니다.

import tkinter as tk

root = tk.Tk()
root.title("grid() rowspan / columnspan 예제")

# 라벨
label_title = tk.Label(root, text="회원 가입", font=("Arial", 14), bg="lightgray")

label_name = tk.Label(root, text="이름:")
label_email = tk.Label(root, text="이메일:")
label_pw = tk.Label(root, text="비밀번호:")

# 입력창
entry_name = tk.Entry(root)
entry_email = tk.Entry(root)
entry_pw = tk.Entry(root, show="*")

# 버튼
btn_submit = tk.Button(root, text="확인")
btn_cancel = tk.Button(root, text="취소")

# 배치
label_title.grid(row=0, column=0, columnspan=2, padx=5, pady=10, sticky="we")  
# ⬆️ 첫 번째 행 전체(2칸)를 합쳐서 타이틀 표시

label_name.grid(row=1, column=0, padx=5, pady=5, sticky="e")
entry_name.grid(row=1, column=1, padx=5, pady=5)

label_email.grid(row=2, column=0, padx=5, pady=5, sticky="e")
entry_email.grid(row=2, column=1, padx=5, pady=5)

label_pw.grid(row=3, column=0, padx=5, pady=5, sticky="e")
entry_pw.grid(row=3, column=1, padx=5, pady=5)

btn_submit.grid(row=4, column=0, padx=5, pady=10, sticky="we")
btn_cancel.grid(row=4, column=1, padx=5, pady=10, sticky="we")

root.mainloop()

 

📌 실행 화면

[회원 가입 ----------------------]   ← columnspan=2 (두 칸 합치기)

이름:      [입력창]
이메일:    [입력창]
비밀번호:  [입력창]

[확인버튼]   [취소버튼]

tkinter, grid() 이용한 위젯 배치

 

  • columnspan=2 → 첫 줄(타이틀)이 2개의 열을 합쳐서 표시됩니다.
  • 만약 버튼을 세로로 길게 합치고 싶다면 rowspan을 사용하면 돼요.

 

📌 rowspan 예제

이번에는 rowspan을 사용해서 버튼을 세로로 합치는 예제입니다.

import tkinter as tk

root = tk.Tk()
root.title("grid() rowspan 예제")

# 라벨
label_info = tk.Label(root, text="회원 정보", font=("Arial", 14), bg="lightblue")
label_name = tk.Label(root, text="이름:")
label_email = tk.Label(root, text="이메일:")
label_pw = tk.Label(root, text="비밀번호:")

# 입력창
entry_name = tk.Entry(root)
entry_email = tk.Entry(root)
entry_pw = tk.Entry(root, show="*")

# 버튼 (세로로 길게 배치할 예정)
btn_actions = tk.Button(root, text="등록/수정/삭제", bg="lightgreen")

# 배치
label_info.grid(row=0, column=0, columnspan=2, padx=5, pady=10, sticky="we")

label_name.grid(row=1, column=0, padx=5, pady=5, sticky="e")
entry_name.grid(row=1, column=1, padx=5, pady=5)

label_email.grid(row=2, column=0, padx=5, pady=5, sticky="e")
entry_email.grid(row=2, column=1, padx=5, pady=5)

label_pw.grid(row=3, column=0, padx=5, pady=5, sticky="e")
entry_pw.grid(row=3, column=1, padx=5, pady=5)

# 버튼이 row=1~3까지 세로로 차지
btn_actions.grid(row=1, column=2, rowspan=3, padx=10, pady=5, sticky="ns")

root.mainloop()

 

tkinter, grid() 이용한 위젯 배치

 

  • rowspan=3 → 버튼이 세로로 3칸(이름, 이메일, 비밀번호 입력칸 옆) 차지
  • sticky="ns" → 버튼이 위(N)와 아래(S) 방향으로 늘어나도록 설정