Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 버튼 텍스트 크기를 동적으로 조정하는 방법

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"이라는 텍스트가 표시된 버튼이 생성됩니다. 창 크기를 마우스로 조절하면 버튼 자체뿐만 아니라 버튼 안의 텍스트 크기도 창 크기에 맞춰 동적으로 변하는 것을 확인할 수 있습니다.

Tkinter에서 버튼 텍스트 크기를 동적으로 조정하는 방법