Назад к списку статей

Библиотека Customtkinter: основные функции

1

CustomTkinter - очень хороший инструмент для создания графического интерфейса в Python программах. Давайте же разберёмся с основным функционалом данной библиотеки.

Что такое Customtkinter?

CustomTkinter — это UI-библиотека Python на основе Tkinter, которая предоставляет новые, современные и полностью настраиваемые виджеты. Они создаются и используются как обычные виджеты Tkinter и могут также использоваться в сочетании с обычными элементами Tkinter.

По сравнению с Tkinter UI данной библиотеки выглядит на много лучше и современнее. Также в CTK (CustomTkinter) есть множество вариаций настройки тем вашего интерфейса.

Установка

Перед началом работы установите CustomTkinter используя pip. Также, вам понадобится установить обычный Tkinter

pip install tk
pip install customtkinter

Теперь давайте перейдём к основной части нашей статьи

Цвета и темы программы

С помощью данной функции CTK можно задать тему вашей программы. В настоящее время доступны три темы: "blue", "dark-blue"и "green", где "blue" — стандартная тема.

Вы можете задать тему в начале своей программы следующим образом:

customtkinter.set_default_color_theme("dark-blue")

Тема описывается файлом .json, например: dark-blue.json. Вы можете создать свою собственную тему, чтобы не устанавливать стиль для каждого виджета вручную. Просто скопируйте файл .json выше и измените значения. Затем вы можете загрузить новую тему, передав путь к файлу .json методу .set_default_color_theme:

customtkinter.set_default_color_theme("путь/до/вашей/темы.json")

Ну а если же вы хотите задать цвет определённому элементу без использования тем, то делайте это с помощью fg-color, передавая туда название цвета (red, green, blue) или hex значение (например #FF0000)

button = customtkinter.CTkButton(root_tk, fg_color="red")
button = customtkinter.CTkButton(root_tk, fg_color="#FF0000"

Создание окна приложения

Основой любого графического интерфейса является главное окно. В CustomTkinter его создание практически идентично обычному Tkinter, но с дополнительными возможностями настройки:

import customtkinter as ctk

app = ctk.CTk()  # Создаём главное окно
app.title("Моё приложение")  # Устанавливаем заголовок
app.geometry("800x600")  # Устанавливаем размеры окна
app.resizable(False, False)  # Запрещаем изменение размеров
app.mainloop()  # Запускаем главный цикл приложения

Основные отличия от стандартного Tkinter:

Основные виджеты CustomTkinter

1. Кнопки (CTkButton)

Кнопки - один из самых часто используемых элементов интерфейса. В CustomTkinter они выглядят современнее и имеют больше вариантов стилизации:

button = ctk.CTkButton(
    master=app,  # Родительский элемент
    text="Нажми меня",  # Текст кнопки
    command=button_click,  # Функция-обработчик
    width=120,  # Ширина
    height=40,  # Высота
    corner_radius=10,  # Скругление углов
    fg_color="#2CC985",  # Цвет фона
    hover_color="#207A4D",  # Цвет при наведении
    text_color="white",  # Цвет текста
    font=("Arial", 14)  # Шрифт
)
button.pack(pady=20)

Особенности CTkButton:

2. Текстовые поля (CTkEntry)

Для ввода текста в CustomTkinter используется виджет CTkEntry, который имеет современный внешний вид и дополнительные возможности:

entry = ctk.CTkEntry(
    master=app,
    width=250,
    height=40,
    corner_radius=15,
    placeholder_text="Введите текст...",
    font=("Arial", 14),
    text_color="#333333",
    fg_color="#F0F0F0",
    border_color="#CCCCCC",
    border_width=1
)
entry.pack(pady=20)

Новые возможности по сравнению с обычным Entry:

3. Метки (CTkLabel)

Для отображения текста используется CTkLabel - улучшенная версия стандартного Label:

label = ctk.CTkLabel(
    master=app,
    text="Привет, мир!",
    font=("Arial", 18, "bold"),
    text_color="#333333",
    wraplength=300,  # Перенос текста
    justify="left"  # Выравнивание
)
label.pack(pady=20)

4. Флажки (CTkCheckBox)

Флажки позволяют пользователю выбирать опции. В CustomTkinter они выглядят современнее:

checkbox = ctk.CTkCheckBox(
    master=app,
    text="Согласен с условиями",
    checkbox_width=20,
    checkbox_height=20,
    corner_radius=5,
    border_width=2,
    hover_color="#2CC985",
    command=checkbox_event
)
checkbox.pack(pady=20)

5. Радиокнопки (CTkRadioButton)

Для выбора одного варианта из нескольких используются радиокнопки:

radio_var = tk.IntVar(value=1)

radio1 = ctk.CTkRadioButton(
    master=app,
    text="Вариант 1",
    variable=radio_var,
    value=1
)
radio1.pack(pady=5)

radio2 = ctk.CTkRadioButton(
    master=app,
    text="Вариант 2",
    variable=radio_var,
    value=2
)
radio2.pack(pady=5)

Геометрия и расположение элементов

CustomTkinter поддерживает все стандартные методы управления геометрией из Tkinter:

Пример использования grid() для создания формы:

# Создаём фрейм для формы
frame = ctk.CTkFrame(app)
frame.pack(pady=20, padx=20, fill="both", expand=True)

# Метка и поле для имени
name_label = ctk.CTkLabel(frame, text="Имя:")
name_label.grid(row=0, column=0, padx=10, pady=10, sticky="e")

name_entry = ctk.CTkEntry(frame, width=200)
name_entry.grid(row=0, column=1, padx=10, pady=10)

# Метка и поле для email
email_label = ctk.CTkLabel(frame, text="Email:")
email_label.grid(row=1, column=0, padx=10, pady=10, sticky="e")

email_entry = ctk.CTkEntry(frame, width=200)
email_entry.grid(row=1, column=1, padx=10, pady=10)

# Кнопка отправки
submit_btn = ctk.CTkButton(frame, text="Отправить", width=100)
submit_btn.grid(row=2, column=1, padx=10, pady=20, sticky="e")

Советы по созданию интерфейсов

  1. Используйте фреймы (CTkFrame) для группировки элементов и создания структуры
  2. Добавляйте отступы (padx, pady) между элементами для лучшего визуального восприятия
  3. Соблюдайте единый стиль - одинаковые размеры кнопок, шрифты, цвета
  4. Используйте сетку (grid) для сложных макетов с выравниванием
  5. Добавляйте подсказки (placeholder) в поля ввода
  6. Тестируйте интерфейс на разных разрешениях экрана

Пример простой программы на CustomTkinter

Перейдём к практике. Под конец не хочу вас грузить, по это пример будет максимально простой и понятный новичкам. А сделаем мы конвертер градусов цельсия в градусы по фаренгейту. Но для начала давайде вспомним, как вообще перевести цельсии в фаренгейты:

Фаренгейты = Цельсии × 5/9 + 32

Зная эту формулу мы легко сможем перенести её в Python. И так, вот код конвертера:

import customtkinter as ctk  # Импортируем CustomTkinter

def convert_temperature():   # Функция для конвертации градусов цельсия в фаренгейты
    try:
        celsius = float(entry.get())
        fahrenheit = (celsius * 9/5) + 32    # Используем формулу конвертации
        result_label.configure(text=f"{celsius}°C = {fahrenheit:.1f}°F")    # Формируем готовый для отображения текст
    except ValueError:
        result_label.configure(text="Введите число!")    # Если пользователь ничего не ввёл, то просим об этом

app = ctk.CTk()    # Создаём окно
app.title("Конвертер температур")    # Задаём заголовок окна
app.geometry("400x250")    # Задаём размеры окна

frame = ctk.CTkFrame(master=app)    # Используем компановку
frame.pack(pady=20, padx=40, fill="both", expand=True)     # Настраиваем отступы

label = ctk.CTkLabel(master=frame, text="Введите температуру в °C:", font=("Arial", 14))    # Выводим заголовок
label.pack(pady=10)

entry = ctk.CTkEntry(master=frame, placeholder_text="0", width=150)    # Создаём текстовое поле
entry.pack(pady=5)

convert_button = ctk.CTkButton(master=frame, text="Конвертировать", command=convert_temperature)    # Создаём кнопку
convert_button.pack(pady=20)

result_label = ctk.CTkLabel(master=frame, text="", font=("Arial", 16))    # Показываем результат конвертации
result_label.pack()

app.mainloop()

Вот, что у нас в итоге получится:

1

Заключение

CustomTkinter - это мощная библиотека для создания современных графических интерфейсов на Python. Она сохраняет простоту Tkinter, но добавляет множество возможностей для кастомизации и улучшения внешнего вида приложений.

Основные преимущества CustomTkinter:

Для более глубокого изучения рекомендую ознакомиться с официальным репозиторием на GitHub и документацией библиотеки.