본문 바로가기
GUI 튜토리얼/tkinter 한꼬집씩만 따라해보기

17. sticky로 위젯 정렬하기 #도전과제

by 일코 2022. 11. 16.

지난 포스팅

지난 포스팅에서는 체크박스 및 체크박스의 상태 초기화, 체크박스 command에 함수를 붙여보는 연습을 했습니다.

2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 16. 체크박스에 함수 붙여보기

 

16. 체크박스에 함수 붙여보기

지난 포스팅 지난 포스팅에서는 체크버튼을 생성하고, 상태값을 초기화하는 방법에 대해 설명드렸습니다. 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 15. 체크버튼에 기본값 부여하기(선택

martinii.fun


 

이번 포스팅에서는 : sticky로 위젯 상하좌우 정렬

위젯의 너비나 높이가 다르기 때문에, GUI 안에 위젯들을 배치하다 보면

마치 뒤죽박죽처럼 꼬여 보일 수가 있어요.

완벽한 해결책은 아니지만 sticky가 어느 정도 깔끔한 레이아웃을 그려줄 수 있어요.

sticky인자는 할당된 grid 안에서 좌우 또는 상하로 정렬을 해 주거든요.

예시를 들어보겠습니다.

import tkinter as tk

win = tk.Tk()

tk.Label(win, text="상당히 길어 공간을 많이 차지하는 레이블").grid(row=0, column=0)
tk.Checkbutton(win, text="체크박스1").grid(row=1, column=0)
tk.Checkbutton(win, text="체크박스2").grid(row=2, column=0)

win.mainloop()

win 창 안에 차례대로 레이블 하나와 체크버튼 두 개를 생성했습니다.

실행해보면

체크박스 두 개가 자동으로 중앙정렬 되었는데, 별로 보기가 좋지 않네요.

두 개의 체크박스를 (그리드 안에서) 왼쪽으로 붙이고 싶습니다.

그러면 grid() 안에 sticky="w" 파라미터를 주시면 돼요.

w는 동서남북의 서(west)쪽을 가리키는 "w"입니다.
그럼 오른쪽은 "e", 위쪽은 "n", 아래쪽은 "s"라는 걸 단번에 아시겠지요?ㅎ

그럼 sticky 인자를 주고 다시 실행해볼까요?

import tkinter as tk

win = tk.Tk()

tk.Label(win, text="상당히 길어 공간을 많이 차지하는 레이블").grid(row=0, column=0)
tk.Checkbutton(win, text="체크박스1").grid(row=1, column=0, sticky='w')  # <---
tk.Checkbutton(win, text="체크박스2").grid(row=2, column=0, sticky='w')  # <---

win.mainloop()

실행해보면

체크박스가 왼쪽(west)으로 붙었지요?

이번에도 도전과제를 하나 드리겠습니다.

아래와 같은 GUI를 완성해보세요.

힌트는 columnspan입니다. (제 포스팅에서는 다루지 않았습니다. 직접 검색을 해보시기 바랍니다.)

풀어보셨나요?

예시 코드는 아래에 남겨둡니다.

더보기
import tkinter as tk

win = tk.Tk()

tk.Label(win, text="상당히 길어 공간을 많이 차지하는 레이블").grid(row=0, column=0, columnspan=2)
tk.Checkbutton(win, text="체크박스1").grid(row=1, column=0, sticky='w')
tk.Checkbutton(win, text="체크박스2").grid(row=1, column=1, sticky='e')

win.mainloop()

columnspan 인자는 칼럼을 몇 개나 차지할 것인지 정해줍니다. (기본값은 1이겠죠?)

Label의 grid는 (행 0, 열 0)인데, columnspan이 2(두 칸)이니까 (0,0)과 (0,1)을 모두 차지하겠다는 뜻이에요.

모식도

체크버튼은 각각 (1, 0), (1, 1)을 한 칸씩 차지하고요.

마지막으로 왼쪽 체크버튼은 왼쪽(w)으로 정렬, 오른쪽 체크버튼은 오른쪽(e)으로 정렬했습니다.

실행해보면,

긴 설명이 필요없는 간단한 개념이라서 도전과제로 넣어보았습니다.

 

시리즈 중간 즈음에

어느덧 tkinter 관련한 포스팅이 스무 개 가까이 쌓이고 있네요.
서두에서도 이야기한 바 있지만, 이 포스팅 시리즈는
제가 최근까지 접했던 GUI 강의들이 너무 어려워서 만들게 되었어요.
저는 GUI를 잘 만들어보고 싶어서 책도 여러 권 읽었고, 온라인강의도 제법 들었는데
하나같이 가장 어려웠던 부분이 다름아닌 "기나긴 예제를 읽고 이해하기"였어요.
실무에서 사용할 법한 예제를 엄선해 주시는 건 강사와 저자 분들께 넘 감사했지만,
GUI를 이해하기 위해 재무제표를 만들어야 한다든지, 네트워크를 이해해야 한다는 건
제게는 정말 어려웠거든요..
그래서 이렇게 실속없이 제 방식대로
핵심예제와 개념만 짧게 보여드리는 강의를 만들어보고 싶었어요.
모든 분들의 마음에 쏙 들진 않겠지만,
저와 비슷한 어느 분들께는 꼭 도움이 되었으면 좋겠습니다.
재미있게 읽어주셨다면, 혹은 제안 주실 게 있다면
공감과 댓글로 피드백 주시면 넘넘 감사하겠습니다.
질문도 환영합니다.

그럼 다음 포스팅으로 넘어가봅시다.

 


다음 포스팅

2022.11.17 - [기타/tkinter 한꼬집씩만 따라해보기] - 18. 라디오버튼 만들기

 

18. 라디오버튼 만들기

지난 포스팅 2022.11.16 - [기타/tkinter 한꼬집씩만 따라해보기] - 17. sticky로 위젯 정렬하기 #도전과제 17. sticky로 위젯 정렬하기 #도전과제 지난 포스팅 지난 포스팅에서는 체크박스 및 체크박스의 상

martinii.fun

 

댓글