Tkinter 프레임 안에 버튼과 레이블을 만들었다고 가정해 보겠습니다. 이때 해결해야 할 과제는 버튼 텍스트가 메인 윈도우 크기에 맞춰 동적으로 조정되도록 만드는 것입니다. 버튼은 Button 위젯을 사용해 손쉽게 생성할 수 있으며, 버튼 레이블을 동적으로 제어하기 위해 몇 가지 유용한 함수들을 함께 활용할 수 있습니다.
Grid 메서드로 윈도우 크기 동적 조정하기
이번 예제에서는 "Python"이라는 텍스트가 들어간 버튼을 하나 만들어 보겠습니다. rowconfigure()와 columnconfigure() 같은 Grid 메서드를 사용하면 메인 윈도우(루트)의 크기가 변할 때 위젯도 함께 늘어나거나 줄어들도록 설정할 수 있습니다.
bind() 메서드로 이벤트 바인딩하기
버튼 텍스트를 동적으로 만들려면 bind("<Configure>", 명령) 메서드를 사용합니다. 이 메서드는 이벤트와 함수를 서로 연결(바인딩)해 주는 역할을 합니다. 여기에는 위젯의 새 위치와 크기 정보를 담고 있는 콜백 함수(callback)와, 창 크기 변화에 따라 버튼 텍스트를 수정하는 헬퍼 함수(helper)를 전달할 수 있습니다.
먼저 버튼 텍스트의 크기를 너비(width) 기준으로 조정한 뒤, 이어서 높이(height) 기준으로도 조정하도록 구현해 보겠습니다.
예제 코드
from tkinter import *
win= Tk()
win.geometry("700x300")
#윈도우와 위젯을 동적으로 리사이즈
Grid.rowconfigure(win, index=0, weight=1)
Grid.columnconfigure(win, index=0, weight=1)
#버튼 텍스트 크기를 변경하는 함수 정의
def resize(e):
#버튼의 너비 가져오기
w= e.width/10
#버튼 텍스트를 동적으로 리사이즈
b.config(font=("Times New Roman",int(w)))
#높이 기준으로 리사이즈
if e.height <=300:
b.config(font= ("Times New Roman",30))
elif e.height<100:
b.config(font= ("Time New Roman", 10))
#버튼 생성
b=Button(win,text="Python")
b.grid(row= 0, column=0, sticky= "nsew")
win.bind('', resize)
win.mainloop() 실행 결과
위 코드를 실행하면 "Python"이라는 텍스트가 표시된 버튼이 생성됩니다. 창 크기를 마우스로 조절하면 버튼 자체뿐만 아니라 버튼 안의 텍스트 크기도 창 크기에 맞춰 동적으로 변하는 것을 확인할 수 있습니다.
