Приложение A – Диаграмма классов




Приложение B – Исходный код приложения

#импорт модулей библиотеки для создания интерфейса и возможности использования стандартных методов

from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import (

QApplication, QWidget, QPushButton, QLabel,

QListWidget, QLineEdit, QTextEdit, QInputDialog,

QHBoxLayout, QVBoxLayout

)

#для хранения данных используем json-файл

import json

 

 

#создаем заготовку: новый список, в котором заранее хранится самая первая заметка-приветствие

notes = {

'Добро пожаловать':{

   'текст' : 'Это самое лучшее приложение для заметок в мире!',

   'теги' : ['добро','инструкция']

}

}

 

#открываем json-файл для чтения

with open("notes_data.json", "w") as file:

json.dump(notes, file, ensure_ascii = False)

 

#создаем объект "Приложение"

app = QApplication([])

 

#создаем элементы интерфейса

my_win = QWidget()

my_win.setWindowTitle('Умные заметки')

my_win.resize(900, 600)

 

list_notes = QListWidget()

list_notes_label = QLabel('Список заметок')

 

button_note_create = QPushButton('Создать заметку')

button_note_del = QPushButton('Удалить заметку')

button_note_save = QPushButton('Сохранить заметку')

 

field_tag = QLineEdit('')

field_tag.setPlaceholderText('Введите тег...')

field_text = QTextEdit()

button_tag_add = QPushButton('Добавит к заметке')

button_tag_del = QPushButton('Открепит от заметки')

button_tag_search = QPushButton('Искать заметки по тегу')

list_tags = QListWidget()

list_tags_label = QLabel('Список тегов')

 

#направляющие лайауты и прикрепление элементов интерфейса к ним

layout_notes = QHBoxLayout()

col_1= QVBoxLayout()

col_1.addWidget(field_text)

 

col_2 = QVBoxLayout()

col_2.addWidget(list_notes_label)

col_2.addWidget(list_notes)

 

row_1 = QHBoxLayout()

row_1.addWidget(button_note_create)

row_1.addWidget(button_note_del)

 

row_2 = QHBoxLayout()

row_2.addWidget(button_note_save)

 

col_2.addLayout(row_1)

col_2.addLayout(row_2)

 

col_2.addWidget(list_tags_label)

col_2.addWidget(list_tags)

col_2.addWidget(field_tag)

 

row_3 = QHBoxLayout()

row_3.addWidget(button_tag_add)

row_3.addWidget(button_tag_del)

 

row_4 = QHBoxLayout()

row_4.addWidget(button_tag_search)

 

col_2.addLayout(row_3)

col_2.addLayout(row_4)

 

#растяжение лайаутов относительно размеров окна

layout_notes.addLayout(col_1, stretch = 2)

layout_notes.addLayout(col_2, stretch = 1)

#прикрепление главного лайаута к окну приложения

my_win.setLayout(layout_notes)

 

#описание функций-обработчиков для реакций на события

# Функция-обработчик для события "Добавление заметки"

def add_note():

note_name, ok = QInputDialog.getText(my_win, 'Добавить заметку', 'Название заметки: ')

if ok and note_name != '':

   notes[note_name] = {'текст' : '', 'теги' : []}

   list_notes.addItem(note_name)

   list_tags.addItems(notes[note_name]['теги'])

   print(notes)

 

# Функция-обработчик для события "Показать заметку и ее содержимое"

def show_note():

key = list_notes.selectedItems()[0].text()

print(key)

field_text.setText(notes[key]['текст'])

list_tags.clear()

list_tags.addItems(notes[key]['теги'])

 

# Функция обработчик для события "Созранить заметку и ее содержимое"

def save_note():

if list_notes.selectedItems():

   key = list_notes.selectedItems()[0].text()

   notes[key]['текст'] = field_text.toPlainText()

   with open('notes_data.json', 'w') as file:

       json.dump(notes, file, sort_keys=True, ensure_ascii=False)

   print(notes)

else:

   print('Заметки для сохранения не выбраны!')

 

# Функция-обработчик для события "Удалить заметку и ее сожержимое"

def del_note():

if list_notes.selectedItems():

   key = list_notes.selectedItems()[0].text()

   del notes[key]

   list_notes.clear()

   list_tags.clear()

   field_text.clear()

   list_notes.addItems(notes)

   with open('notes_data.json', 'w') as file:

       json.dump(notes, file, sort_keys=True, ensure_ascii=False)

   print(notes)

else:

   print('Заметки для удаления не выбранны!')

 

# Функция-обработчик для события "Добавление тега к заметке"

def add_tag():

if list_notes.selectedItems():

   key = list_notes.selectedItems()[0].text()

   tag = field_tag.text()

   if not tag in notes[key]['теги']:

       notes[key]['теги'].append(tag)

       list_tags.addItem(tag)

       field_tag.clear()

   with open('notes_data.json', 'w') as file:

       json.dump(notes, file, sort_keys=True, ensure_ascii=False)

   print(notes)

else:

   print('Заметка для добавления тега не выбранна!')

 

# Функция-обработчик для события "Удалить тег заметки"

def del_tag():

if list_tags.selectedItems():

   key = list_notes.selectedItems()[0].text()

   tag = list_tags.selectedItems()[0].text()

   notes[key]['теги'].remove(tag)

   list_tags.clear()

   list_tags.addItems(notes[key]['теги'])

   with open('notes_data.json', 'w') as file:

       json.dump(notes, file, sort_keys=True, ensure_ascii=False)

else:

   print('Теги для удаления не выбранны')

 

# Функция-обработчик для события "Поиск заметки по тегу"

def search_tag():

print(button_tag_search.text())

tag = field_tag.text()

if button_tag_search.text() == 'Искать заметки по тегу' and tag:

   print(tag)

   notes_filtered = {}

   for note in notes:

       if tag in notes[note]['теги']:

           notes_filtered[note]=notes[note]

   button_tag_search.setText('Сбросить поиск')

   list_notes.clear()

   list_tags.clear()

   list_notes.addItems(notes_filtered)

   print(button_tag_search.text())

elif button_tag_search.text() == 'Сбросить поиск':

   field_tag.clear()

   list_notes.clear()

   list_tags.clear()

   list_notes.addItems(notes)

   button_tag_search.setText('Искать заметки по тегу')

   print(button_tag_search.text())

else:

   pass

 

# Подвязка функция-обработчиков к событиям серез команду-подписку на событие "clicked.connect()"

button_note_create.clicked.connect(add_note)

list_notes.itemClicked.connect(show_note)

button_note_save.clicked.connect(save_note)

button_note_del.clicked.connect(del_note)

button_tag_add.clicked.connect(add_tag)

button_tag_del.clicked.connect(del_tag)

button_tag_search.clicked.connect(search_tag)

 

list_notes.itemClicked.connect(show_note)

 

# Отображение окна приложения на экран

my_win.show()

 

# Открытие json-файла для записи

with open("notes_data.json", "r") as file:

notes = json.load(file)

 

# Добавление заметки в список заметок

list_notes.addItems(notes)

 

# С помощью метода "exec_()" приложение остается открытым, пока его не закроет пользователь

app.exec_()


 


Дата добавления: 2021-07-19; просмотров: 111; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!