Данная программа представляет собой пример использования библиотеки TKinter для создания графического интерфейса.
Конструктор класса принимает один параметр:
root
: Это корневой виджет Tkinter, который служит контейнером для всего интерфейса приложения.
- Устанавливается заголовок окна приложения.
- Создается объект изображения (
self.image
) с использованием библиотеки Pillow. Это изображение служит виртуальным холстом, на котором происходит рисование. Изначально оно заполнено белым цветом. - Инициализируется объект
ImageDraw.Draw(self.image)
, который позволяет рисовать на объекте изображения. - Создается виджет Canvas Tkinter, который отображает графический интерфейс для рисования. Размеры холста установлены в 600x400 пикселей.
- Создаются переменные для хранения размера кисти (self.brush_size), стиля кисти (self.style_var), и цвета кисти (self.pen_color).
- Создается виджет
tk.Label
для предварительного просмотра текущего цвета кисти. - Вызывается метод
self.setup_ui()
, который настраивает элементы управления интерфейса. - Привязываются обработчики событий к холсту для отслеживания движений мыши при рисовании и сброса состояния кисти при отпускании кнопки мыши.
- Добавляются горячие клавиши для быстрого доступа к функциям:
Ctrl+S
для сохранения изображения иCtrl+C
для выбора цвета.
Этот метод отвечает за создание и расположение виджетов управления:
- Создает элементы управления интерфейсом: кнопки "Очистить", "Выбрать цвет", "Сохранить", меню выбора размера кисти.
- Создает виджет для предварительного просмотра цвета кисти и размещает его рядом с кнопкой выбора цвета.
- Вызывает метод
create_brush_size_menu
для создания меню выбора размера кисти.
- Создает меню выбора размера кисти с заданными вариантами размеров.
- Создает слайдер для выбора размера кисти.
- Обновляет значение размера кисти в соответствии с выбранным значением.
Функция вызывается при движении мыши с нажатой левой кнопкой по холсту. Она рисует линии на холсте Tkinter и параллельно на объекте Image из Pillow:
event
: Событие содержит координаты мыши, которые используются для рисования.- Линии рисуются между текущей и последней зафиксированной позициями курсора, что создает непрерывное изображение.
- Обновляет последние координаты кисти.
Сбрасывает последние координаты кисти. Это необходимо для корректного начала новой линии после того, как пользователь отпустил кнопку мыши и снова начал рисовать.
Очищает холст, удаляя все нарисованное, и пересоздает объекты Image и ImageDraw для нового изображения.
Позволяет пользователю изменить размер холста, запрашивая новую ширину и высоту через диалоговое окно. После изменения размеров пересоздаются объекты Image и ImageDraw.
Открывает стандартное диалоговое окно выбора цвета и устанавливает выбранный цвет как текущий для кисти. Обновляет виджет предварительного просмотра цвета.
Обновляет цвет предварительного просмотра в виджете tk.Label
.
Позволяет пользователю сохранить изображение, используя стандартное диалоговое окно для сохранения файла. Поддерживает только формат PNG. В случае успешного сохранения выводится сообщение об успешном сохранении.
Функциональность "Ластика" представлена в приложении следующим образом:
- При нажатии на кнопку "Ластик" текущий цвет кисти изменяется на белый, что позволяет стирать нарисованные линии на холсте.
- Обновляет виджет предварительного просмотра цвета.
Переключает режим на кисть (с восстановлением обратно цвета кисти). Обновляет виджет предварительного просмотра цвета.
Извлекает цвет пикселя в месте клика правой кнопкой мыши и устанавливает его в качестве текущего цвета кисти. Обновляет виджет предварительного просмотра цвета.
event
: Событие мыши.
Преобразует кортеж RGB в шестнадцатеричный код цвета.
rgb
: Кортеж из трех значений (R, G, B).
Позволяет пользователю добавить текст на холст, запрашивая ввод через диалоговое окно. После выбора текста пользователь может кликнуть на холст, чтобы разместить текст в указанном месте.
Открывает диалоговое окно выбора цвета для изменения цвета фона холста. Пересоздает объекты Image и ImageDraw с новым цветом фона.
<B1-Motion>
: Событие привязано к методу paint, позволяя рисовать на холсте при перемещении мыши с нажатой левой кнопкой.<ButtonRelease-1>
: Событие привязано к методу reset, который сбрасывает состояние рисования для начала новой линии.<Button-2>
: Событие привязано к правой кнопке мыши (трекпада) для вызова метода pick_color.<Control-s>
: Событие привязано к методу save_image, позволяя сохранять изображение через комбинацию клавиш.<Control-c>
: Событие привязано к методу choose_color, позволяя выбирать цвет кисти через комбинацию клавиш.
Пользователь может рисовать на холсте, выбирать цвет и размер кисти, использовать функцию "Ластика", очищать холст и сохранять в формате PNG.
Код покрыт модульными тестами для проверки функциональности основных методов класса DrawingApp. Тесты выполняются с использованием библиотеки unittest.mock для замены стандартных объектов и функций на макеты (mocks) в целях изоляции тестируемого кода. Тесты включают в себя проверку рисования на холсте, выбора цвета и размера кисти, использования функции "Ластика", очистки холста и сохранения изображения в формате PNG. Каждый тест проверяет определенное поведение методов класса DrawingApp, обеспечивая корректность работы приложения в различных сценариях использования.
Основные тесты
test_clear_canvas
: Проверяет, что метод clear_canvas корректно очищает холст, вызывая метод delete виджета canvas.test_choose_color
: Проверяет, что метод choose_color корректно устанавливает цвет кисти, используя диалоговое окно выбора цвета.test_save_image
: Проверяет, что метод save_image корректно сохраняет изображение в формате PNG и отображает сообщение об успешном сохранении.test_save_image_with_extension
: Проверяет, что метод save_image корректно добавляет расширение .png к имени файла, если оно отсутствует.test_paint
: Проверяет, что метод paint корректно обновляет координаты кисти при рисовании на холсте.test_reset
: Проверяет, что метод reset корректно сбрасывает последние координаты кисти.test_use_eraser
: Проверяет, что метод use_eraser корректно устанавливает цвет кисти в белый.test_use_brush
: Проверяет, что метод use_brush корректно восстанавливает предыдущий цвет кисти.test_update_brush_size
: Проверяет, что метод update_brush_size корректно обновляет размер кисти.test_update_color_preview
: Проверяет, что метод update_color_preview корректно обновляет виджет предварительного просмотра цвета.test_resize_canvas
: Проверяет, что метод resize_canvas корректно изменяет размер холста и обновляет соответствующий объект изображения.test_style_menu
: Проверяет, что меню выбора стиля кисти корректно устанавливает выбранный стиль.test_pick_color
: Проверяет, что метод pick_color корректно извлекает цвет пикселя под курсором и устанавливает его в качестве текущего цвета кисти.
Если у вас есть еще какие-то запросы или требуется дополнительная информация, не стесняйтесь обращаться.