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)
참고
'Python > Tkinter' 카테고리의 다른 글
[Tkinter] 12. 스크롤바 Scrollbar 위젯 (0) | 2024.02.16 |
---|---|
[Tkinter] 11. 리스트박스 Listbox 위젯 (0) | 2024.02.15 |
[Tkinter] 9. 기본 위젯: 콤보박스 Combobox 위젯 (0) | 2024.02.14 |
[Tkinter] 8. 기본 위젯: 엔트리 Entry 위젯 (0) | 2024.02.14 |
[Tkinter] 7. 기본 위젯: 라디오버튼 Radiobutton 위젯 (0) | 2024.02.14 |