이전 포스팅
2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 30. 위젯에 툴팁 붙이기
30. 위젯에 툴팁 붙이기
이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 29. 스핀박스 위젯 추가하기 29. 스핀박스 위젯 추가하기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우
martinii.fun
이번 포스팅에서는 : 커스텀 테마 적용하기
tkinter로 만든 GUI에 특별한 디자인 테마를 적용할 수 있습니다.
적용방법은 여러 가지가 있지만, 이번 포스팅에서는
① 가장 간편하게 GUI의 룩앤필을 수정할 수 있는 ttkthemes 모듈,
② 미리 작성된(수정가능한) tcl 테마파일을 다운로드하고 적용하는 방법,
③ 마지막으로 ttkbootstrap에 대해서 소개해드리려고 합니다.
1. ttkthemes 적용하기
ttkthemes의 사용방법은 너무너무 간단해서, 임포트 한 줄, 코드 한 줄이면 됩니다.
우선 pip로 ttkthemes를 설치해줍니다.

아래는 기존 ttk GUI입니다. 이 GUI창을 기준으로 비교해보려고 합니다.
코드는 별 의미 없지만 바로 아래에 첨부해놓겠습니다.

코드는 이것저것 다 때려넣느라 다소 깁니다. 아무 영양가 없는 코드지만,
(우측의 트리뷰를 제외하고) 지금까지 배웠던 거의 모든 위젯에 대해 쭉 다루고 있으니
복습 겸 훑어보셔도 괜찮겠습니다.
이제 이 GUI창에 커스텀 테마를 적용해보겠습니다.
추가/수정해야 하는 라인은 딱 두 줄, 임포트문과 win=tk.Tk() 라인입니다.
기존코드 최상단을
아래처럼 바꿔주시면 됩니다.
코드에서 보셨다시피
메인윈도우인 win을 생성할 때 win = tk.Tk()로 생성하는 대신
win = ThemedTk(theme=테마이름) 으로 생성하기만 하면 됩니다.
ttkthemes에서 제공하는 기본 테마는 아래 25개입니다.
공식 문서에서는 모든 테마의 예제 GUI를 보여주고 있습니다.
Themes — ttkthemes v3.2.2 documentation
ttkthemes includes a wide variety of different themes, and there is always room for more themes, no matter how ugly or obscure! Even though some themes may not be used in practice, the original goal of the project has not been forgotten: To gather and pres
ttkthemes.readthedocs.io
이번 포스팅에서는 이 중 아홉 가지 테마인
"arc", "blue", "clearlooks", "elegance", "kroc", "plastik", "ubuntu", "winxpblue", "breeze"을 보여드리겠습니다.
나머지 테마들이 덜 멋지다는 뜻은 아닙니다. 랜덤하게 아홉 개만 골랐습니다.
1. arc

2. blue

3. clearlooks

4. elegance

5. kroc

6. plastik

7. ubuntu

8. winxpblue

9. breeze

여기까지
엄청나게 간편하게 룩앤필을 적용하거나 수정할 수 있는 ttkthemes에 대해 알아보았습니다.
2. tcl 테마파일 이용하기
아래 웹페이지를 참고하시면 tkinter와 호환되는 서드파티 테마인 tcl 파일을 다운받으실 수 있습니다.
List of ttk themes | Tkinter docs (rdbende.github.io)
List of ttk themes | Tkinter docs
List of ttk themes Most of the ttk themes are old, and ugly, but there are nice and modern ones. This is a complete list of ttk themes with additional useful information about them.
rdbende.github.io

저는 깃헙의 azure 레포에서 dark.tcl 파일을 적용해보겠습니다.
GitHub - rdbende/Azure-ttk-theme: A stunning modern theme for ttk inspired by Fluent Design 💠
GitHub - rdbende/Azure-ttk-theme: A stunning modern theme for ttk inspired by Fluent Design 💠
A stunning modern theme for ttk inspired by Fluent Design 💠 - GitHub - rdbende/Azure-ttk-theme: A stunning modern theme for ttk inspired by Fluent Design 💠
github.com
적용방법은 아래와 같습니다. 위젯삽입은 위와 동일한 코드를 사용하였습니다.
azure 예제파일에서는 아래와 같은 코딩스타일로 테마를 적용하고 있습니다.
아래는 azure dark 테마의 example.py 파일의 코드 전체입니다.
실행해보면

굉장히 깔끔하네요.
3. ttkbootstrap 적용하기
주의사항 : 첫 번째로 보여드린 ttkthemes와 ttkbootstrap을 같이 사용하는 경우 오류가 발생합니다.
마지막으로 보여드릴 테마적용 방법은 ttkbootstrap 모듈을 이용하는 것입니다.

이 모듈이 참 재밌는 게, 이름에 걸맞게 웹개발에 사용하는 bootstrap의 클래스명이 여기에 유사하게 적용됩니다.
ttkbootstrap - ttkbootstrap
ttkbootstrap A supercharged theme extension for tkinter that enables on-demand modern flat style themes inspired by Bootstrap. 📦 Features ✔️ Built-in Themes Over a dozen curated dark and light themes ✔️ Pre-defined Styles: Loads of beautiful pre
ttkbootstrap.readthedocs.io
공식문서에서도 ttkbootstrap이 실제 bootstrap에서 영감을 받아 제작된 모듈이라고 소개하고 있습니다.
A supercharged theme extension for tkinter that enables on-demand modern flat style themes inspired by Bootstrap.
1. 적용방법
ttkbootstrap을 적용하려면 먼저 pip로 ttkbootstrap을 설치해야 합니다.

적용방법도 간단합니다. from tkinter import ttk 대신에
이 두 줄로 임포트를 합니다.
특정 엘리먼트에 스타일을 적용하는 방법은
이런 식으로 요소 인스턴스를 생성할 때 bootstyle을 적용하는 것입니다.
위 코드를 실행하면 아래와 같은 창이 생성됩니다.

메인윈도우창마저도 ttkbootstrap 적용이 가능한데,
ttkbootstrap.Window 클래스를 tk.Tk 대신 사용하면 됩니다.

특정 요소가 아니라 메인윈도우 전체에 특정 테마를 적용하는 방법은 아래와 같습니다.
위 코드를 적용하여 GUI창을 생성해보면

2. 부트스트랩 스타일의 컬러
부트스트랩 스타일로 위젯의 스타일 컬러를 지정할 수 있습니다.

코드는 아래와 같습니다. (bootstyle에 bootstrap의 클래스명을 입력합니다.)
3. 유연한 입력방식
또한 bootstyle 파라미터는 ttkbootstrap 내부적으로 제법 강력한 정규식 파싱을 거치기 때문에
아래와 같이 다양한 파라미터로도 동일한 결과를 출력해줍니다.
- "info-outline"
- "infooutline"
- "info outline"
- "outline-info"
- ("info", "outline")
- (INFO, OUTLINE)
4. 다양한 테마
ttkbootstrap에서는 기본적으로 18개의 테마를 제공하고 있습니다.(light 13개, dark 5개)
아래는 18개 테마의 데모입니다.


















5. 다양한 위젯
ttkbootstrap에서는 기존 위젯 뿐 아니라 datepicker(날짜선택 위젯) 나 floodgauge(레이블이 들어간 프로그레스바) 등의 새로운 위젯도 함께 제공하고 있습니다.
아래는 ttkbootstrap에서 제공하는 위젯들입니다.













































ttkbootstrap은 약 15만 회의 다운로드(월평균 8천회), 730개 깃헙스타를 받은 중견급(?) 모듈인 만큼
다른 모듈에 비해 활발한 업데이트가 이루어지고 있습니다. 게다가 굉장히 느슨한 MIT라이선스를 따르고,
커스텀 테마 제작을 위한 TTK 크리에이터 프로그램(별도설치)이나, 스타일 빌더 등을 제공하고 있어
개인적으로는 ttkbootstrap 모듈의 활용도가 가장 높아 보이기도 합니다.
마치며
tkinter의 시각적인 부분의 약점을 충분히 보완해줄 수 있는 서드파티 스타일을 적용하는 방법에 대해 알아보았습니다.
스타일 적용을 통해 여러분의 GUI에 스타일의 날개를 달아보시기 바랍니다.
다음 포스팅
작성중

'GUI 튜토리얼 > tkinter 한꼬집씩만 따라해보기' 카테고리의 다른 글
32. 진행표시줄(progressbar) 삽입하기 (0) | 2022.11.29 |
---|---|
30. 위젯에 툴팁 붙이기 (0) | 2022.11.28 |
29. 스핀박스 위젯 추가하기 (0) | 2022.11.28 |
댓글