Python은 GUI 기반 애플리케이션을 개발할 수 있는 풍부한 라이브러리를 다수 제공합니다. 그중에서도 Tkinter는 Python으로 GUI 애플리케이션을 만들 때 가장 널리 사용되는 라이브러리 중 하나로, 위젯 추가를 비롯해 애플리케이션 제작에 필요한 다양한 기능과 속성을 지원합니다.
버튼(Button)은 특정 작업이나 이벤트에 할당할 수 있는 대표적인 위젯입니다. 버튼의 크기나 위치를 동적으로 조정하려면 Tkinter의 Grid 모듈을 사용해 레이아웃을 구성하면 됩니다. 특히 rowconfigure()와 columnconfigure() 메서드를 활용하면 버튼 크기를 유연하게 변경할 수 있습니다.
Tkinter의 Grid 시스템에는 위젯 크기를 조정할 때 사용할 수 있는 네 가지 방향 속성이 있으며, 일반적으로 북(North), 남(South), 동(East), 서(West)를 의미합니다. 화면이나 창 크기에 맞춰 버튼이 반응형으로 동작하고 크기가 자동으로 조정되도록 하려면 row와 column 속성을 함께 활용해야 합니다.
예제 코드
# tkinter 라이브러리 임포트
from tkinter import *
win = Tk()
win.title("Dynamically Resize Buttons")
win.geometry("700x500")
# 행(row)과 열(column) 구성
Grid.rowconfigure(win, 0, weight=1)
Grid.columnconfigure(win, 0, weight=1)
# 버튼 생성
b1 = Button(win, text="C++")
b2 = Button(win, text="Java")
# 버튼 리스트 생성
bl = [b1, b2]
row_no = 0
# 모든 버튼을 순회하며 행 단위로 구성
for button in bl:
Grid.rowconfigure(win, row_no, weight=1)
row_no += 1
# 그리드 내 위치를 조정하고 sticky 옵션 적용
b1.grid(row=0, column=0, sticky="nsew")
b2.grid(row=1, column=0, sticky="nsew")
win.mainloop()
참고: 원본 코드의 b2.grid(...) 호출에 있던 stick 오타는 정상 동작을 위해 sticky로 수정했습니다.
실행 결과
위 코드를 실행하면 두 개의 버튼이 세로 방향으로 배치되어 표시되며, 화면이나 창 크기를 조절하면 버튼 역시 비율에 맞게 동적으로 크기가 조정됩니다. weight 값을 조절하면 각 행·열이 창 크기 변화를 얼마나 분배받을지 지정할 수 있으므로, 다양한 반응형 레이아웃을 손쉽게 구현할 수 있습니다.
