강의노트 위젯 배치 - grid

강의노트 • 조회수 43 • 댓글 0 • 작성 1주 전 • 수정 1주 전  
  • 위젯 배치
  • grid

grid 속성

위젯을 격자형태(행과 열)로 배치한다. 복잡한 레이아웃을 pack( )보다 훨씬 유연하고 정밀한 컨트롤이 가능하다.

부모 위젯을 행과 열 형태로 나눈뒤, 각 칸에 위젯을 배치한다. 각 위젯은 (행, 열)좌표에 위치한다.

기본적으로 위젯의 크기에 맞게 셀이 조절되며, 셀 병합, 패딩, 확장등도 가능하다.

그리드의 기본형태는

widget.grid(**options)

주요 옵션들은 :

옵션 설명
row/column 위젯이 배치될 행과 열을 지정 widget.grid(row=0, column=1) # 0행 1열에 위젯을 배치
rowspan/ columnspan 행이나 열을 병합하여 차지할때 사용 widget.grid(row=0, column=0, rowspan=2, columnspan=3) # 위젯은 (0,0)에 서 2행, 3열을 병합한다.
sticky 셀 안에서 위젯의 정렬 방향을 지정. n,s,e,w(동,서,남,북)와 조합도 가능. widget.grid(row=0, column=0, sticky='nsew') # 셀 전체를 채운다.
padx/pady 외부 여백을 지정 widget.grid(padx=10,pady=5) #위젯의 외부 여백을 좌우를 10, 위아래를 5의 여백을 준다.
ipadx/ipady 내부 여백을 지정 widget.grid(ipadx=5, ipady=10) #내부 공간을 좌우로 5, 위아래로 10의 여백을 준다.
rowconfigure() / columnconfigure( ) 부모 위젯의 특정 행/열이 여분 공간을 어떻게 분배할지 설정 widget.grid_rowconfigure(0, weight=1)

예제

import tkinter as tk
root = tk.Tk()
root.geometry("300x200")
for i in range(3):
    root.grid_rowconfigure(i, weight=i+1)
    root.grid_columnconfigure(i, weight=i+1)
tk.Label(root, text="A", bg="red").grid(row=0, column=0, sticky="ns")  #1
tk.Label(root, text="B", bg="green").grid(row=0, column=1, columnspan=2, sticky="ew")
tk.Label(root, text="C", bg="blue").grid(row=1, column=0, rowspan=2, sticky="ne")
tk.Label(root, text="D", bg="orange").grid(row=1, column=1, sticky="nsew")
tk.Label(root, text="E", bg="purple").grid(row=2, column=2, sticky="nsew")
root.mainloop()

from tkinter import *

win = Tk()
win.geometry('250x250')
win.title('pack 함수')

lbl1 = Label(win, text='111')
lbl2 = Label(win, text='222')
lbl3 = Label(win, text='333')
lbl4 = Label(win, text='444')
lbl5 = Label(win, text='555')
lbl6 = Label(win, text='666')
lbl7 = Label(win, text='777')
lbl8 = Label(win, text='888')
lbl9 = Label(win, text='999')

lbl1.grid(row = 0, column = 0)
lbl2.grid(row = 0, column = 1)
lbl3.grid(row = 0, column = 2)
lbl4.grid(row = 1, column = 0)
lbl5.grid(row = 1, column = 1)
lbl6.grid(row = 1, column = 2, rowspan=2)
lbl7.grid(row = 2, column = 0, columnspan=2)
lbl8.grid(row = 3, column = 0)
lbl9.grid(row = 3, column = 1)

win.mainloop()

그리드는 아래 그림과 같이 행과 열로 표현된다.

'666'은 행폭(rowspan)을 2로 만든다.

'777'은 열폭(columnspan)을 2로 만든다.

나머지들은 지정된 행과 열에 배열한다.

이전 글
다음 글
댓글
댓글로 소통하세요.