Бібліотека Tkinter здається дуже корисною, коли ви починаєте створювати графічні інтерфейси (GUI) в Python, але після певного використання її візуальний вигляд може здатися дещо обмеженим.
Використовуючи бібліотеку Custom Tkinter, ви можете створювати додатки, які виглядають привабливо.
Почніть із завантаження бібліотеки Custom Tkinter за допомогою наступної команди в терміналі.
pip install customtkinter
Офіційну документацію можна знайти тут.
Кольори
Усі кольори віджетів можна налаштувати. Кольори можуть задаватися так, як у стандартній бібліотеці Tkinter, наприклад, використовуючи ім'я кольору або його шістнадцятковий код.
Приклад:
import customtkinter
app = customtkinter.CTk()
customtkinter.CTkButton(master = app , fg_color = "red")
customtkinter.CTkButton(master = app , fg_color="#FF0000")
app.mainloop()
Теми та як їх налаштовувати
За замовчуванням усі віджети налаштовані на синю тему кольорів.
Зараз доступні три теми: “blue” (синя), “dark-blue” (темно-синя) та “green” (зелена).
Ви можете встановити тему кольорів на початку вашого скрипту:
customtkinter.set_default_colour_theme("green") #Значення можуть бути "blue" (за замовчуванням), "green" або "dark-blue"
Ви навіть можете створити свою власну тему кольорів, вказавши шлях до вашого .json файлу.
Файл .json можна створити, використовуючи наступний шаблон:
{
"CTk": {
"fg_color": ["gray95", "gray10"]
},
"CTkToplevel": {
"fg_color": ["gray95", "gray10"]
},
"CTkFrame": {
"corner_radius": 6,
"border_width": 0,
"fg_color": ["gray90", "gray13"],
"top_fg_color": ["gray85", "gray16"],
"border_color": ["gray65", "gray28"]
},
"CTkButton": {
"corner_radius": 6,
"border_width": 0,
"fg_color": ["#3a7ebf", "#1f538d"],
"hover_color": ["#325882", "#14375e"],
"border_color": ["#3E454A", "#949A9F"],
"text_color": ["#DCE4EE", "#DCE4EE"],
"text_color_disabled": ["gray74", "gray60"]
},
"CTkLabel": {
"corner_radius": 0,
"fg_color": "transparent",
"text_color": ["gray14", "gray84"]
},
"CTkEntry": {
"corner_radius": 6,
"border_width": 2,
"fg_color": ["#F9F9FA", "#343638"],
"border_color": ["#979DA2", "#565B5E"],
"text_color": ["gray14", "gray84"],
"placeholder_text_color": ["gray52", "gray62"]
},
"CTkCheckBox": {
"corner_radius": 6,
"border_width": 3,
"fg_color": ["#3a7ebf", "#1f538d"],
"border_color": ["#3E454A", "#949A9F"],
"hover_color": ["#325882", "#14375e"],
"checkmark_color": ["#DCE4EE", "gray90"],
"text_color": ["gray14", "gray84"],
"text_color_disabled": ["gray60", "gray45"]
},
"CTkSwitch": {
"corner_radius": 1000,
"border_width": 3,
"button_length": 0,
"fg_color": ["#939BA2", "#4A4D50"],
"progress_color": ["#3a7ebf", "#1f538d"],
"button_color": ["gray36", "#D5D9DE"],
"button_hover_color": ["gray20", "gray100"],
"text_color": ["gray14", "gray84"],
"text_color_disabled": ["gray60", "gray45"]
},
"CTkRadioButton": {
"corner_radius": 1000,
"border_width_checked": 6,
"border_width_unchecked": 3,
"fg_color": ["#3a7ebf", "#1f538d"],
"border_color": ["#3E454A", "#949A9F"],
"hover_color": ["#325882", "#14375e"],
"text_color": ["gray14", "gray84"],
"text_color_disabled": ["gray60", "gray45"]
},
"CTkProgressBar": {
"corner_radius": 1000,
"border_width": 0,
"fg_color": ["#939BA2", "#4A4D50"],
"progress_color": ["#3a7ebf", "#1f538d"],
"border_color": ["gray", "gray"]
},
"CTkSlider": {
"corner_radius": 1000,
"button_corner_radius": 1000,
"border_width": 6,
"button_length": 0,
"fg_color": ["#939BA2", "#4A4D50"],
"progress_color": ["gray40", "#AAB0B5"],
"button_color": ["#3a7ebf", "#1f538d"],
"button_hover_color": ["#325882", "#14375e"]
},
"CTkOptionMenu": {
"corner_radius": 6,
"fg_color": ["#3a7ebf", "#1f538d"],
"button_color": ["#325882", "#14375e"],
"button_hover_color": ["#234567", "#1e2c40"],
"text_color": ["#DCE4EE", "#DCE4EE"],
"text_color_disabled": ["gray74", "gray60"]
},
"CTkComboBox": {
"corner_radius": 6,
"border_width": 2,
"fg_color": ["#F9F9FA", "#343638"],
"border_color": ["#979DA2", "#565B5E"],
"button_color": ["#979DA2", "#565B5E"],
"button_hover_color": ["#6E7174", "#7A848D"],
"text_color": ["gray14", "gray84"],
"text_color_disabled": ["gray50", "gray45"]
},
"CTkScrollbar": {
"corner_radius": 1000,
"border_spacing": 4,
"fg_color": "transparent",
"button_color": ["gray55", "gray41"],
"button_hover_color": ["gray40", "gray53"]
},
"CTkSegmentedButton": {
"corner_radius": 6,
"border_width": 2,
"fg_color": ["#979DA2", "gray29"],
"selected_color": ["#3a7ebf", "#1f538d"],
"selected_hover_color": ["#325882", "#14375e"],
"unselected_color": ["#979DA2", "gray29"],
"unselected_hover_color": ["gray70", "gray41"],
"text_color": ["#DCE4EE", "#DCE4EE"],
"text_color_disabled": ["gray74", "gray60"]
},
"CTkTextbox": {
"corner_radius": 6,
"border_width": 0,
"fg_color": ["gray100", "gray20"],
"border_color": ["#979DA2", "#565B5E"],
"text_color": ["gray14", "gray84"],
"scrollbar_button_color": ["gray55", "gray41"],
"scrollbar_button_hover_color": ["gray40", "gray53"]
},
"CTkScrollableFrame": {
"label_fg_color": ["gray80", "gray21"]
},
"DropdownMenu": {
"fg_color": ["gray90", "gray20"],
"hover_color": ["gray75", "gray28"],
"text_color": ["gray14", "gray84"]
},
"CTkFont": {
"macOS": {
"family": "SF Display",
"size": 13,
"weight": "normal"
},
"Windows": {
"family": "Roboto",
"size": 13,
"weight": "normal"
},
"Linux": {
"family": "Roboto",
"size": 13,
"weight": "normal"
}
}
}
І це можна реалізувати у вашому скрипті так:
customtkinter.set_default_colour_theme("шлях до вашого json файлу")
Режим відображення
Режим відображення можна налаштувати на “dark” (темний), “light” (світлий) або “system” (системний).
customtkinter.set_appearance_mode("dark")
Віджети CTk
У бібліотеці Custom Tkinter є багато віджетів.
Більшість з них такі ж, як і в бібліотеці tkinter.
CTk Вікна
Існує три типи вікон CTk:
- CTk
- CTkInputDialog
- CTkToplevel
CTk
Клас CTk є основою будь-якої програми на CustomTkinter, він створює головне вікно програми. Під час виконання програми повинна бути лише одна інстанція цього класу з одним викликом методу .mainloop(), який запускає програму.
root = customtkinter.CTk()
root.mainloop()
CTkInputDialog
Цей діалог допомагає користувачу ввести рядок чи число, відкриваючи інший діалог.
dialog = customtkinter.CTkInputDialog(text="Введіть число:", title="Тест")
data = dialog.get_input()
CTkToplevel
Клас CTkToplevel використовується для створення додаткових вікон. Для вікна CTkToplevel не потрібно викликати .mainloop(), воно відкривається одразу після створення.
window = CTkToplevel(master=app) # аргумент master є необов'язковим
CTk Утиліти
Існує два типи утиліт CTk:
- CTkImage
- CTkFont
CTkImage
CTkImage — це не віджет, а контейнер для до двох об'єктів PIL Image для світлого і темного режимів.
from PIL import Image
my_image = customtkinter.CTkImage(light_image=Image.open(""),
dark_image=Image.open(""))
CTkFont
В CustomTkinter є два способи встановити шрифт:
- Встановлення через кортеж
- Створення об'єкта CTkFont
Встановлення через кортеж
button = customtkinter.CTkLabel(master=app, font=("", ))
Цей шрифт не можна змінити після встановлення.
Створення об'єкта CTkFont
Кращий спосіб — це створити об'єкт CTkFont, який можна змінювати пізніше і використовувати для кількох віджетів:
button = customtkinter.CTkButton(app, font=customtkinter.CTkFont(family="", size=, ))
button.cget("font").configure(size=new_size) # налаштування шрифта після
Ось і все на сьогодні. Дякую за увагу! Будь ласка, не соромтесь поділитись своїми зауваженнями в коментарях нижче.
Перекладено з: Make Your Python Application Look Better (Custom Tkinter)