Coder Social home page Coder Social logo

tkinter's Introduction

Программа для создания изображений на основе TKinter

Данная программа представляет собой пример использования библиотеки TKinter для создания графического интерфейса.

Класс DrawingApp

Инициализация init(self, root)

Конструктор класса принимает один параметр:

  • 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 для выбора цвета.

Метод setup_ui(self)

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

  • Создает элементы управления интерфейсом: кнопки "Очистить", "Выбрать цвет", "Сохранить", меню выбора размера кисти.
  • Создает виджет для предварительного просмотра цвета кисти и размещает его рядом с кнопкой выбора цвета.
  • Вызывает метод create_brush_size_menu для создания меню выбора размера кисти.

Метод create_brush_size_menu(self, parent, sizes)

  • Создает меню выбора размера кисти с заданными вариантами размеров.
  • Создает слайдер для выбора размера кисти.

Метод update_brush_size(self, value)

  • Обновляет значение размера кисти в соответствии с выбранным значением.

Метод paint(self, event)

Функция вызывается при движении мыши с нажатой левой кнопкой по холсту. Она рисует линии на холсте Tkinter и параллельно на объекте Image из Pillow:

  • event: Событие содержит координаты мыши, которые используются для рисования.
  • Линии рисуются между текущей и последней зафиксированной позициями курсора, что создает непрерывное изображение.
  • Обновляет последние координаты кисти.

Метод reset(self, event)

Сбрасывает последние координаты кисти. Это необходимо для корректного начала новой линии после того, как пользователь отпустил кнопку мыши и снова начал рисовать.

Метод clear_canvas(self)

Очищает холст, удаляя все нарисованное, и пересоздает объекты Image и ImageDraw для нового изображения.

Метод resize_canvas(self)

Позволяет пользователю изменить размер холста, запрашивая новую ширину и высоту через диалоговое окно. После изменения размеров пересоздаются объекты Image и ImageDraw.

Метод choose_color(self)

Открывает стандартное диалоговое окно выбора цвета и устанавливает выбранный цвет как текущий для кисти. Обновляет виджет предварительного просмотра цвета.

Метод update_color_preview(self)

Обновляет цвет предварительного просмотра в виджете tk.Label.

Метод save_image(self)

Позволяет пользователю сохранить изображение, используя стандартное диалоговое окно для сохранения файла. Поддерживает только формат PNG. В случае успешного сохранения выводится сообщение об успешном сохранении.

Метод use_eraser(self) - "Ластик"

Функциональность "Ластика" представлена в приложении следующим образом:

  • При нажатии на кнопку "Ластик" текущий цвет кисти изменяется на белый, что позволяет стирать нарисованные линии на холсте.
  • Обновляет виджет предварительного просмотра цвета.

Метод use_brush(self)

Переключает режим на кисть (с восстановлением обратно цвета кисти). Обновляет виджет предварительного просмотра цвета.

Метод pick_color(self, event)

Извлекает цвет пикселя в месте клика правой кнопкой мыши и устанавливает его в качестве текущего цвета кисти. Обновляет виджет предварительного просмотра цвета.

  • event: Событие мыши.

Метод rgb_to_hex(self, rgb)

Преобразует кортеж RGB в шестнадцатеричный код цвета.

  • rgb: Кортеж из трех значений (R, G, B).

Метод add_text(self)

Позволяет пользователю добавить текст на холст, запрашивая ввод через диалоговое окно. После выбора текста пользователь может кликнуть на холст, чтобы разместить текст в указанном месте.

Метод change_bg_color(self)

Открывает диалоговое окно выбора цвета для изменения цвета фона холста. Пересоздает объекты 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 корректно извлекает цвет пикселя под курсором и устанавливает его в качестве текущего цвета кисти.

Если у вас есть еще какие-то запросы или требуется дополнительная информация, не стесняйтесь обращаться.

tkinter's People

Contributors

dimais77 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.