😟 문제 상황
현재 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에서도 잘 작동하도록 폰트 우선순위를 고려해야 한다.
폰트 설정만 잘해도 사용자에게 훨씬 깔끔한 느낌을 줄 수 있다는 걸 배우게 되었다.
'STUDY > Python' 카테고리의 다른 글
[Tkinter] 아이콘 설정 후 경계선이 깨지는 현상 (0) | 2025.06.26 |
---|---|
백준 BAEKJOON 33845번 PNUPC에 한 번도 빠지지 않고 출연한 산지니가 새삼 대단하다고 느껴지네 [PYTHON/파이썬] (0) | 2025.06.12 |
[Tkinter] 함수가 왜 미리 실행될까? (1) | 2025.06.11 |
[Tkinter] Tkinter를 활용하여 간단한 메모장 프로그램 만들기 (0) | 2025.04.27 |
Python의 Zip 함수를 활용한 2차원 배열 전환 방법 (0) | 2024.03.19 |