본문 바로가기
Python/Tkinter

[Tkinter] 10. Grid Geometry Manager

by 파인스코어 2024. 2. 15.
728x90

Geometry Manager

Tk는 Geometry Manager를 이용하여 컨테이너 안의 위젯 위치를 정하게 된다.

Geometry Manager에는 세 가지 배치 방법이 존재하는데 pack, grid, place 있다.

그 중에서 grid를 사용하는 것을 추천한다.

pack는 간편하지만 원하는 위치에 배치 하기가 어렵고 place는 원하는 위치에 정확하게 배치할 수 있지만 복잡하기 때문에 일반적인 상황에서는 grid를 사용하는 것이 좋다.

Grid

grid는 행과 열을 이용해서 배치하는 방법이다.

엑셀의 스프레드시트를 생각하면 이해하기가 편하다.

행과 열

grid를 사용해서 배치를 할 때는 행 번호와 열 번호를 지정해주어야 한다.

번호가 0 부터 시작할 필요는 없다.

번호 중간에 갭이 있어도 상관 없다. 이는 나중에 위젯을 사이에 더 배치할 계획이 있을 경우 유용한 방법이다.

각 열의 너비는 위젯의 너비에 의존한다. 행의 높이도 마찬가지로 위젯의 높이를 따라간다.

button.grid(column=0, row=0)

병합

단일 행, 열보다 더 넓은 공간을 차지하기 위해서는 병합을 해야한다.

행 병합은 rowspan, 열 병합은 columnspan 옵션을 사용한다.

여기에 합치기를 원하는 셀의 개수만큼 입력하면 된다.

button.grid(column=0, row=0, columnspan=2)

셀 안에서의 레이아웃

각 셀의 열 너비와 행 높이는 위젯의 너비와 높이에 의존한다고 했다.

이런 점은 다른 위젯의 크기는 주어진 셀의 공간보다 작아질 수도 있다는 이야기가 된다.

이 때 위젯을 셀 공간에서 어느 위치에 배치해야 하는지 지정하는 것이 필요하다.

기본 설정으로는 셀의 정중앙에 위젯이 위치하게 되어 있다.

sticky 옵션을 사용해서 레이아웃을 변경할 수 있다.

N(북), S(남), E(동), W(서)를 값으로 사용한다.

만약, 셀 공간을 위젯으로 꽉 채우고 싶다면 NSEW를 값으로 사용하면 된다.

button.grid(column=0, row=0, columnspan=2, sticky=NSEW)

참고

https://tkdocs.com/tutorial/grid.html

https://tcl.tk/man/tcl8.6/TkCmd/grid.htm

728x90