본문 바로가기
Python

[Python] customtkinter 사용하기

by llHoYall 2023. 1. 17.

customtkintertkinter를 좀 더 modern한 UI로 이쁘게 만들어 줍니다.

간단한 예제와 함께 소개시켜 드릴게요.

Installation

간단하게 pipcustomtkinter만 설치하시면 됩니다.

$ pip install customtkinter

First Example

이제 간단하게 첫 번째 example을 만들어 볼게요.

import customtkinter

class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        self.title("minimal example app")
        self.minsize(400, 300)

        self.button = customtkinter.CTkButton(master=self, command=self.button_callback)
        self.button.pack(padx=20, pady=20)

    def button_callback(self):
        print("button pressed")

if __name__ == "__main__":
    app = App()
    app.mainloop()

기존에 tkinter를 사용하셨던 분들은 바로 사용하실 수 있으실 거에요.

마우스 포인터를 올려보면 hovering도 구현이 되어 있습니다. ㅎㅎㅎ

바로 이렇게 이뻐지니 너무 좋네요.

Change Theme

기본 모드는 dark인데, light혹은 system 설정 내용을 따르게 할 수 있습니다.

또한, 기본 color theme는 blue이지만, dark-blue 혹은 green을 설정할 수 있고요.

customtkinter.set_appearance_mode("light")
customtkinter.set_default_color_theme("green")

코드의 전역 범위에 위와같이 원하는 theme를 명시하시면 됩니다.

당연하게도 원하는 color theme를 직접 만들어 적용할 수도 있는데, json 형태로 만들어 주시면되요.

예시를 링크로 드리니 한 번 살펴보세요.

https://github.com/TomSchimansky/CustomTkinter/wiki/Themes#custom-themes

Decorate Widget

개별 위젯 단위로 색상을 설정할 수도 있습니다.

self.button2 = customtkinter.CTkButton(master=self, command=self.button_callback, fg_color=("orange", "darkorange"), hover_color=("red", "darkred"))
self.button2.pack(padx=20)

색상을 그냥 넣으면 항상 적용이 되고, tuple 형태로 넣으면 앞쪽은 light 모드일 때, 뒤쪽은 dark 모드일 때 적용이 됩니다.

text_color, border_color 등도 같은 형태로 변경하실 수 있어요.

Counter Application

마지막으로 간단한 counter 앱을 하나 만들어 보고 마치겠습니다.

import customtkinter

class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        self.title("Counter App")
        self.minsize(400, 300)

        self.counter = 0

        self.label = customtkinter.CTkLabel(self, text="0")
        self.button1 = customtkinter.CTkButton(self, text="-", command=self.decrease)
        self.button2 = customtkinter.CTkButton(self, text="+", command=self.increase)

        self.label.grid(row=0, column=1)
        self.button1.grid(row=0, column=0, padx=10)
        self.button1.configure(width=50)
        self.button2.grid(row=0, column=2, padx=10)
        self.button2.configure(width=50)

        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)
        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure(2, weight=1)

    def decrease(self):
        self.counter -= 1
        self.label.configure(text=str(self.counter))

    def increase(self):
        self.counter += 1
        self.label.configure(text=str(self.counter))

if __name__ == "__main__":
    app = App()
    app.mainloop()

기존의 tkinter와 거의 차이가 없죠? CTk 접두사가 붙거나 config 대신 configure를 사용하거나 하는 정도의 차이만 있습니다.

하지만 결과물 차이는 매우 큽니다. ^^

'Python' 카테고리의 다른 글

[Python] Enumeration  (0) 2023.02.21
[Python] Data Classes  (0) 2023.02.20
[PyQt6] GroupBox, CheckBox, RadioButton in QML  (0) 2022.11.21
[PyQt6] Dialogs in QML  (0) 2022.11.20
[PyQt6] User Input in QML  (0) 2022.11.19

댓글