Top.Mail.Ru

Мини CRM-система на CustomTkinter: идея проекта и план реализации

Мини CRM-система на CustomTkinter: идея проекта и план реализации

Мини CRM — отличный проект для портфолио или практики GUI. Он позволяет объединить интерфейс, работу с базой данных и базовую архитектуру приложения.


Что такое CRM?

CRM (Customer Relationship Management) — система для управления клиентами, сделками и взаимодействиями.

В мини-версии можно реализовать:

  • 📋 Список клиентов

  • ➕ Добавление / редактирование / удаление

  • 🔎 Поиск по имени или телефону

  • 🗂 Статус клиента (новый, в работе, закрыт)

  • 📝 Заметки

  • 💾 Сохранение данных в SQLite


Структура проекта

mini_crm/
│
├── main.py
├── database.py
├── ui/
│   ├── main_window.py
│   ├── client_form.py
│
└── assets/

Интерфейс (CustomTkinter)

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

  • CTk

  • CTkFrame

  • CTkButton

  • CTkEntry

  • CTkTextbox

  • CTkOptionMenu

  • CTkTabview

Главный экран:

----------------------------------
|  Поиск  |  [+ Добавить]        |
----------------------------------
|  Список клиентов               |
|  ----------------------------   |
|  Иванов | 8900... | В работе  |
|  ...                            |
----------------------------------

Работа с базой (SQLite)

Пример структуры таблицы:

CREATE TABLE clients (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    phone TEXT,
    email TEXT,
    status TEXT,
    notes TEXT
);

Архитектура

Лучше использовать простую MVC-структуру:

  • Model → database.py

  • View → UI (CustomTkinter)

  • Controller → логика между ними

Это сделает код масштабируемым.


Минимальный пример окна CRM

import customtkinter as ctk

ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")

class CRMApp(ctk.CTk):
    def __init__(self):
        super().__init__()
        self.title("Mini CRM")
        self.geometry("800x500")

        self.search_entry = ctk.CTkEntry(self, placeholder_text="Поиск клиента...")
        self.search_entry.pack(padx=20, pady=10, fill="x")

        self.add_button = ctk.CTkButton(self, text="Добавить клиента")
        self.add_button.pack(pady=5)

        self.clients_frame = ctk.CTkFrame(self)
        self.clients_frame.pack(padx=20, pady=10, fill="both", expand=True)

app = CRMApp()
app.mainloop()

Что можно добавить для «вау-эффекта»

  • 🌗 Переключатель темы (light/dark)

  • 📊 График количества клиентов по статусам

  • 📁 Экспорт в Excel

  • 🔐 Авторизация

  • 📅 История взаимодействий

  • 🔔 Напоминания

Автор:

11

Читайте также

0 комментариев

Оставьте комментарий

Комментарии

×
Подпишитесь на наш Telegram-канал, чтобы быть в курсе всех новостей и акций!
Подписаться