Приложение для заметок
Соберём всё вместе — список, редактор, сигналы, сохранение — в настоящее приложение для заметок.
Каркас
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QSplitter
splitter = QSplitter(Qt.Horizontal)
splitter.addWidget(self.list) # слева — список заметок
splitter.addWidget(self.editor) # справа — редактор
splitter.setSizes([150, 450])
QSplitter делит окно на части, а пользователь двигает границу мышью.
Данные отдельно от виджетов
Тексты заметок храните в обычном списке Python self.notes, а виджеты пусть только показывают их:
- выбор строки (
currentRowChanged) → показатьself.notes[row]в редакторе; - правка в редакторе (
textChanged) → записать текст вself.notes[row]и обновить подпись строки; - сохранение → записать
self.notesв JSON (тема 4).
Каждое изменение делайте и в данных, и в виджете — иначе экран и данные разойдутся, и в файл сохранится не то, что видит пользователь.
Заголовок заметки
Подпись в списке — первая непустая строка, обрезанная до разумной длины, с многоточием …. Пустая заметка — «Без названия».
Удаление и создание
- после удаления выбирайте заметку, вставшую на место удалённой, а если удалили последнюю — новую последнюю:
min(row, len(notes) - 1); - когда заметок не осталось, редактор очищают и выключают — писать некуда;
- новая заметка появляется сверху и сразу выбрана; имя без повторов:
Новая заметка,Новая заметка 2, …
Что дальше
- Сборка в программу:
pip install pyinstallerиpyinstaller --windowed --onefile notes.py— получится один.exe, который запускается без установленного Python; - Qt Designer (
pyside6-designer) — рисовать окна мышью и загружать их в программу; - QSS — оформление в стиле CSS:
app.setStyleSheet("QPushButton { padding: 6px; }"); - QSettings — запомнить размер окна и последний открытый файл.
Итог
QSplitter— список и редактор рядом;- данные в
self.notes, виджеты только показывают; - заголовок из первой непустой строки;
- удаление с выбором соседа, новые заметки без повторов имён.