STUDY/Python

[Tkinter] Tkinter 폰트(font) 설정과 활용 정리

칼코 2025. 6. 5. 18:40
728x90
반응형

😟 문제 상황

현재 Tkinter에 공부하고 있던 와중에 제공되는 기본 폰트가 마음에 들지 않았다. 그래서 폰트 사용 방법에 대해 검색하여 알게 된 것들을 정리해 볼까 한다.

 

✔️ 현재 작업하고 있는 프로그램

 

UI만 완성시켰는데 기본 폰트가 영... 아닌 것 같다. 😭


✅ 기본적인 폰트 설정 방법

폰트를 지정하기 위해 가장 간단한 방법은 font 옵션을 사용하는 것이다.

sample_label = Label(root, text="샘플 Label 입니다.", font=("맑은 고딕", 12))
sample_label.pack()

 

이때 튜플의 형식은 다음과 같다.

font = (family, size, style)
  • family : 폰트 이름 (ex. Arial, 맑은 고딕)
  • size : 폰트 크기 (정수)
  • style : bold, italic, underline, overstrike 등을 공백으로 구분하여 함께 쓸 수 있음

 

예제

sample_label1 = Label(root, text="샘플 Label1 입니다.", font=("맑은 고딕", 11))
sample_label2 = Label(root, text="샘플 Label2 입니다.", font=("Arial", 12, "bold"))
sample_label3 = Label(root, text="샘플 Label3 입니다.", font=("바탕", 13, "italic underline")

 

sample_label3처럼 공백으로 구분하여 style 속성의 이름을 넣어주면 된다.


🔧 font.Font 객체를 이용한 고급 설정

위의 튜플 방식은 간단하지만 속성 조합이 많아질수록 가독성이 떨어진다.

이럴 땐 tkinter.font.Font 객체를 사용하는 것이 훨씬 편하다.

 

예제

from tkinter import font

custom_font = font.Font(
    family="맑은 고딕",
    size=14,
    weight="bold",
    slant="italic",
    underline=1,
    overstrike=1,
)

sample_label1 = Label(root, text="샘플 Label1 입니다.", font=custom_font)

 

이와 같이 font.Font 객체를 통해 만든 값을 custom_font 변수에 저장하여 사용할 수 있다.

속성별 상세 설명

  • family : 폰트 이름 (맑은 고딕, Arial)
  • size : 폰트 크기 (pt 단위). 음수는 픽셀 단위 (12, -14)
  • style
    • weight : 굵기 (normal, bold)
    • slant : 기울임 여부 (roman, italic)
    • underline : 밑줄 여부 (1, 0)
    • overstrike : 취소선 여부 (1, 0)

🔍 사용 가능한 폰트 목록 확인하기

시스템에 설치된 폰트 목록은 font.families()로 확인할 수 있다.
한 번 print를 사용하여 출력해보겠다.

from tkinter import font

print(font.families())

 

정말 많은 폰트들이 시스템 상에 저장되어 있는 것을 확인했다.

 

만약 OS별로 해당하는 폰트가 없으면?

현재 나는 Windows 사용자인데 만약 macOS  리눅스 사용자라면 Windows에서 제공되는 폰트를 사용하지 못할 것이다.
폰트를 한 가지로만 지정해서 코드를 짜는 것이 아닌 여러 환경에 적용될 수 있는 폰트를 여러 개 준비해야 한다는 것을 알게 되었다.

from tkinter import font

preferred_fonts = ["맑은 고딕", "Segoe UI", "AppleGothic", "Noto Sans CJK KR", "Arial"]

for f in preferred_fonts:
    if f in font.families():
        selected_font = f
        break
else:
    selected_font = "TkDefaultFont"

custom_font = font.Font(family=selected_font, weight="bold")
sample_label1 = Label(root, text="시스템 상에 존재하는 폰트로 적용", font=custom_font)

 

적용될 폰트의 우선 순위를 고려한 뒤, 리스트에 여러 개의 폰트 이름을 저장해두고 for 문을 통해 해당 폰트가 시스템에 존재하는 지 확인하는 작업을 했다. 만약 리스트 내의 모든 폰트가 없더라면 Tkinter의 기본 폰트인 TkDefaultFont를 적용하게끔 구현했다.

그 다음에는 위에서 했던 방식과 같이 custom_font에 원하는 size와 style을 지정 후 label에 적용시킨 모습이다.


✍️ 마무리

  • Tkinter에서는 튜플 방식과 객체 방식으로 폰트를 설정할 수 있다.
  • 다양한 스타일을 적용할 땐 font.Font() 객체 방식이 가독성 측면에서 더 낫다.
  • 다른 OS에서도 잘 작동하도록 폰트 우선순위를 고려해야 한다.

 

폰트 설정만 잘해도 사용자에게 훨씬 깔끔한 느낌을 줄 수 있다는 걸 배우게 되었다.

 

 

728x90
반응형