В этом проекте мы создаем графическое приложение на Python, позволяющее пользователю управлять заметками: добавлять, редактировать, удалять и просматривать их. Программа реализована с помощью библиотеки Tkinter для графического интерфейса и MySQL для хранения данных. Также реализована функция настройки подключения к базе данных через интерфейс.
Проект состоит из нескольких файлов:
-
main.py
— основной файл, содержащий логику приложения и наследующий интерфейсные элементы. -
widgets.py
— отдельный класс с графическими элементами. -
db.py
— класс для работы с MySQL (предположительно, хотя не предоставлен). -
config.py
— файл конфигурации с переменными (TITLE
,WINDOWS
). -
config_db.json
— JSON-файл с настройками подключения к MySQL.
Интерфейс разделён на две части:
-
Список заметок слева (TreeView со столбцами "Заголовок" и "Создано").
-
Форма редактирования заметки справа (заголовок, описание, кнопки).
В верхнем меню также есть пункт "Настройки", через который можно:
-
Настроить подключение к MySQL.
-
Выполнить экспорт заметок.
-
Завершить работу программы.
Основной класс: NotesApp
Класс NotesApp
наследуется от Widgets
, в котором реализована функция create_widgets()
— создание и размещение всех интерфейсных компонентов.
Инициализация
def __init__(self, root):
self.db = DB()
self.root = root
...
При создании экземпляра класса происходит:
-
Подключение к базе данных.
-
Установка заголовка и размеров окна.
-
Загрузка всех виджетов и заметок.
-
Привязка события (хотя
bind
пока не используется).
Работа с заметками
Загрузка всех заметок
def load_notes(self):
...
Сначала очищается список TreeView, затем выполняется запрос к базе данных. Каждая заметка вставляется в таблицу с iid
, равным id
, что упрощает выборку и удаление.
Добавление/редактирование заметки
def save_button_(self):
...
-
Если пользователь выбрал заметку — обновляется существующая.
-
Если нет — создаётся новая.
-
Дата и время сохраняются в формате
YYYY-MM-DD HH:MM:SS
.
Выбор заметки
def on_note_select(self, event):
...
При выборе строки в TreeView
, данные о заметке извлекаются из базы и отображаются в полях. Также активируются кнопки "Удалить" и "Сохранить".
Удаление заметки
def delete_note(self):
...
Удаляет выбранную заметку из базы после подтверждения.
Очистка формы (новая заметка)
def add_note(self):
...
Очищает поля ввода, сбрасывает выбор заметки и отключает кнопку "Удалить".
Настройка MySQL
def show_mysql_settings(self):
...
При вызове открывается новое окно с полями для ввода:
-
host
,user
,password
,db_name
,port
Настройки загружаются из config_db.json
(если есть) и сохраняются обратно после редактирования.
Сохранение настроек
def save_settings(self):
...
Сохраняет все введённые параметры в config_db.json
.
Тест соединения
def test_mysql_connection(self):
...
Пытается подключиться к MySQL с введёнными параметрами и выводит сообщение об успехе или ошибке.
Класс Widgets
: Интерфейс
Этот вспомогательный класс формирует визуальные элементы:
-
Меню с настройками.
-
Список заметок (TreeView).
-
Панель редактирования:
Entry
для заголовка,Text
для описания, кнопка "Сохранить".
Привязка обработчиков осуществляется через command=
.
Что можно улучшить
-
Добавить автосохранение при смене заметки.
-
Реализовать функцию экспорта в MySQL.
-
Добавить поиск/фильтр заметок.
-
Сделать авторизацию пользователя.
-
Улучшить визуальный стиль с помощью
ttk.Style
.
Данный проект является отличным примером применения Tkinter и MySQL в настольном приложении. Он демонстрирует:
-
Создание интерфейса с разделением логики.
-
Использование TreeView для отображения списка записей.
-
Работа с базой данных через модуль
mysql.connector
. -
Хранение конфигурации в формате JSON.
Пример использования
-
Запустите
main.py
. -
Настройте MySQL-соединение через меню.
-
Добавьте новые заметки или редактируйте существующие.
-
Удаляйте ненужные записи.
Автор: Евгений Морковин
1 комментарий
https://github.com/yemorkovin/notes