반응형
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()
📌 실행 화면 (텍스트 표현)

- 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 (두 칸 합치기)
이름: [입력창]
이메일: [입력창]
비밀번호: [입력창]
[확인버튼] [취소버튼]
- 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()
- rowspan=3 → 버튼이 세로로 3칸(이름, 이메일, 비밀번호 입력칸 옆) 차지
- sticky="ns" → 버튼이 위(N)와 아래(S) 방향으로 늘어나도록 설정
'Python > 파이썬 기초 강의(2024)★' 카테고리의 다른 글
파이썬 tkinter: pack(), grid(), place() 위젯 배치 비교 요약 (5) | 2025.08.30 |
---|---|
파이썬, tkinter 위젯 배치하기: place() (1) | 2025.08.28 |
tkinter, pack()을 이용한 위젯 배치 (2) | 2025.08.26 |
파이썬, pip: 패키지 및 라이브러리를 설치하고 관리하기 (2) | 2024.12.18 |
파이썬, 텍스트 파일에 저장하기 읽어오기 (0) | 2024.11.27 |