강의노트 위젯 배치 - grid
강의노트
• 조회수 43
• 댓글 0
• 작성 1주 전
• 수정 1주 전
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로 만든다.
나머지들은 지정된 행과 열에 배열한다.
이전 글
다음 글
로그인 하면 댓글을 쓸 수 있습니다.