안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
이번 시간에는 우리가 .py 파일에 작성한 코드를 GUI(Graphical User Interface)를 기반으로 사용자 입력을 받아서 실행시킬 수 있는 방법에 대해서 알아보겠습니다.
예전 글에서는 PyQT에 대해서 주로 다루었습니다. 하지만 PyQT의 경우 기능이 많고 예쁜 GUI를 만들 수 있다는 장점이 있는 반면 라이브러리가 무거워서 불필요하게 프로그램 사이즈가 커지는 경우가 자주 발생했습니다. 비유를 들자면 아주 간단한 과자를 주문했는데 그걸 포장한 박스가 아주 비싸고 화려하고 무거운 느낌이랄까요?
그래서 이번 시간에는 파이썬에서 기본적으로 제공하지만 너무 못 생겨서 잘 사용하지 않는 Tkinter를 쓸만 할 정도로 예쁘게 만든 CustomTkinter에 대해서 알아보겠습니다.
1. CustomTkinter란?
CustomTkinter는 Tkinter의 확장 버전으로, 보다 현대적인 UI 디자인을 쉽게 적용할 수 있도록 만들어진 GUI 라이브러리입니다. 기존 Tkinter의 제한적인 디자인을 보완하며, 다크 모드 및 다양한 색상 테마를 지원합니다.
이 글에서는 CustomTkinter의 주요 기능, 장점과 단점, 그리고 간단한 사용법을 소개합니다.
2. CustomTkinter의 장점과 단점
[장점]
1) 모던한 UI 디자인: 기존 Tkinter보다 세련된 스타일을 제공하며, 기본적으로 다크 모드를 지원합니다.
2) Tkinter와의 높은 호환성: 기존 Tkinter 코드와 호환되며, 추가적인 스타일링 기능을 제공합니다.
3) 간단한 코드 작성: 보다 직관적인 API를 제공하여 코드 작성을 단순화합니다.
4) 다크 모드 및 테마 지원: 애플리케이션의 전체적인 색상 테마를 쉽게 조정할 수 있습니다.
5) 크로스 플랫폼 지원: Windows, Mac, Linux에서 원활하게 작동합니다.
[단점]
1) Tkinter의 한계를 가짐: Tkinter 기반이므로 PyQt나 PySide 같은 고급 GUI 프레임워크보다는 기능이 제한적입니다.
2) 커뮤니티 자료가 적음: 비교적 새로운 라이브러리라 CustomTkinter에 대한 예제나 문서가 많지 않습니다.
3. CustomTkinter 설치
터미널(또는 명령 프롬프트)에서 아래 명령어를 실행하세요.
pip install customtkinter
4. CustomTkinter 간단한 사용법
CustomTkinter는 Tkinter와 유사하지만 보다 현대적인 UI 디자인을 쉽게 적용할 수 있습니다. 이번 시간에는 아주 간단히 CustomTkinter 창을 띄우고 라벨과 버튼 하나씩을 창에 추가하는 코드로 CustomTkinter와 친해져보는 시간을 가져보겠습니다.
[코드]
import customtkinter as ctk
# 1) 기본 설정
ctk.set_appearance_mode("Light") # 창 모드 설정 (System, Light, Dark)
ctk.set_default_color_theme("blue") # UI 테마 설정 (blue, dark-blue, green)
# 2) 메인 윈도우 생성
root = ctk.CTk()
root.geometry("400x300")
root.title("CustomTkinter 예제")
# 3) 라벨 추가
label = ctk.CTkLabel(root, text="Hello, CustomTkinter!", font=("Arial", 20))
label.pack(pady=20)
# 4) 버튼 추가
def on_click():
label.configure(text="버튼이 클릭됨!")
button = ctk.CTkButton(root, text="클릭하세요", command=on_click)
button.pack(pady=10)
# 5) 실행
root.mainloop()
1) 기본 설정
[코드]
# 기본 설정
ctk.set_appearance_mode("Dark") # 다크 모드 설정 (System, Light, Dark)
ctk.set_default_color_theme("green") # 테마 설정 (blue, dark-blue, green)
CustomTkinter는 3가지 창 모드와 3가지 UI 색상 테마를 설정할 수 있습니다.
창 모드는 set_appearance_mode( ) 클래스로 설정 가능하며, "System", "Light", "Dark" 모드를 괄호 안에 넣어서 설정 가능합니다. 여기서 "System" 모드는 사용자의 운영체제(OS) 설정에 따라서 자동으로 다크 또는 라이트 모드가 적용되는 모드입니다.
컬러 테마는 버튼 혹은 슬라이드, 체크 박스 등의 색상을 결정하는 옵션입니다. "blue", "dark-blue", "green" 모드를 괄호 안에 넣어서 설정 가능합니다. 개인적인 취향이지만 저는 "green"은 별로라서 안쓸 것 같네요.
[결과]
2) 메인 윈도우 생성
[코드]
# 메인 윈도우 생성
root = ctk.CTk()
root.geometry("400x300")
root.title("CustomTkinter 예제")
메인 윈도우 생성은 CTk( ) 클래스를 이용합니다. 보통 GUI 프로그래밍을 할 때, 관례적으로 메인창을 나타내는 변수명은 'root'로 지어줍니다.
창 크기는 geometry( ) 메소드의 괄호 안에 "가로x세로"를 입력함으로써 설정 가능하며, 창의 타이틀은 title( ) 메소드의 괄호 안에 "원하는 타이틀"을 문자열로 입력함으로써 설정 가능합니다.
3) 라벨 추가
[코드]
# 라벨 추가
label = ctk.CTkLabel(root, text="Hello, CustomTkinter!", font=("Arial", 20))
label.pack(pady=20) # pady: 위아래 여백
간단히 텍스트를 추가하는 코드입니다. GUI 프로그래밍에서는 창 존재하는 텍스트를 "Label"이라고 부르는 편입니다. CTkLabel( ) 클래스를 이용하며 괄호 안에 들어가는 이번 시간에는 3가지만 알아보겠습니다.
버튼, 라벨 등의 위젯(Widget) 관련 클래스는 모두 가장 처음 root를 입력 받습니다. 가장 기본이 되는 규칙이니 기억해주세요. 다음은 라벨의 내용을 text 파라미터에 문자열로 입력해주었으며, 폰트의 글꼴과 사이즈를 튜플 형태로 입력해주었습니다.
pack( ) 메소드의 pady 파라미터를 통해서 텍스트의 위아래 여백도 넣어주었습니다. pack 메소드는 위젯을 창에 배치하는 역할로 넣어주지 않으면 안되는 코드입니다. 항상 어떤 위젯이든지 넣어준다고 생각하면 되겠습니다.
이 외에도 폰트 색상, 텍스트 배경 색상, 텍스트 상자의 크기, 그에 따른 자동 줄바꿈 설정까지 존재하지만, 아마도 이 CustomTkinter를 사용하는 이유가 심플하게 GUI를 구현하는 것이라서 큰 의미는 없을 것이라 생각되네요.
4) 버튼 추가
[코드]
# 버튼 추가
def on_click():
label.configure(text="버튼이 클릭됨!")
button = ctk.CTkButton(root, text="클릭하세요", command=on_click)
button.pack(pady=10)
버튼을 추가하기 전에, 버튼을 눌렀을 때 실행되기 원하는 함수를 정의해주어야 합니다. on_click( )이라는 함수를 정의해주었고 그 기능은 위에서 만들어 주었던 label의 텍스트를 "버튼이 클릭됨!"으로 수정해주는 것입니다.
함수를 정의해주었으니 이제 버튼을 추가해보겠습니다. 버튼 추가 역시 라벨을 추가했을 때와 거의 동일합니다. CTkButton( ) 클래스로 추가해주며, 필수 요소인 root를 첫번째 인자로 넣어주고 그 다음 버튼을 나타낼 텍스트, 버튼을 눌렀을 때 실행될 함수명을 입력해줍니다. 마지막으로는 라벨 때와 마찬가지로 pack( )을 메소드로 버튼을 창에 배치해줍니다.
버튼을 클릭하니까 위에 있던 라벨이 "버튼이 클릭됨!"으로 변경된 것이 보이시나요?
[결과]
5) 버튼 추가
[코드]
# 실행
root.mainloop()
매우 간단하지만 코드지만 이 코드 한줄이 없으면 GUI 창이 열렸다가 바로 꺼질 정도로 필수적인 코드입니다. 참고로 mainloop()는 GUI 프로그램이 실행되는 동안 계속 동작하면서 사용자의 입력(클릭, 키보드 입력 등)을 감지하고 처리하는 역할을 합니다.
5. CustomTkinter 위젯 종류들
CustomTkinter에는 위에서 소개드린 위젯 (라벨, 버튼) 외에 여러가지 위젯들이 존재합니다. 이러한 위젯들을 활용하면 프로그램 실행에 필요한 변수들을 사용자가 쉽게 조정 가능하죠. 추가적인 위젯들에 대한 내용은 다음 글에서 소개드리도록 하겠습니다.
오늘 준비한 내용은 여기까지입니다. 다음에도 코딩유치원을 찾아주세요~
'파이썬 패키지 > GUI 프로그램' 카테고리의 다른 글
[Python/GUI] CustomTkinter 위젯 총정리: 사용법과 예제 코드 한눈에 보기! (0) | 2025.02.02 |
---|---|
PyQt를 상업적으로 사용하고 싶다면? 정답은 PySide6 (0) | 2022.01.05 |
[Python/Pyqt5] QWidget, QMainWindow, Qdialog 차이 총정리 (ft. Modal과 Modeless) (0) | 2021.12.06 |
[파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램 (2) | 2021.05.22 |
[파이썬 GUI 프로그래밍] PyQt5 기초_3강.Qt Designer로 내마음대로 GUI 구성하기 (0) | 2021.05.10 |