Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Графика PyQt5. Продолжение с графическим редактированием, используем QImage по полной

Доброго здоровья читателям моего канала programmer's notes. Поддерживаем мой канал.

Использование QImage для рисования, графический редактор

Продолжаем статьи о графических редакторах. Предыдущая была здесь

Сегодня используем объект QImage для рисования по полной программе. Кроме этого реализуем сохранение и загрузку картинок. В данной программе (окно программы см. на рисунке 2) мы отказываемся от векторного подхода и в ней не реализован процесс отката, но зато есть возможность не только сохранять картинку (ctrl+s), но и её загружать (cntrl+l).

Скриншот программы представлен на рисунке 1.

Рисунок 1. Простой графический редактор. Текст программы см. ниже по ссылке
Рисунок 1. Простой графический редактор. Текст программы см. ниже по ссылке
primer393.py

Пояснения к программе

  • При создании окна QWidget мы также создаём объект QImage (self.image), устанавливая его размер такой же как у окна. Цвет фона выбираем белый (Qt.white).
  • Метод mouseMoveEvent() в данном случае используется для отслеживания движения мыши и рисования, если self.f = 1. Для рисования используем объект QPainder, используя метод drawLine() - прямая между двумя точками на объекте QImage. Обращаю внимание, что при создании объекта QPainter мы привязываем его сразу к объекту QImage. Линия проводится между двумя точками self.lp (предыдущая) и e.pos() (текущая).
  • Метод mouseDoubleClickEvent() - обработка двойного щелчка, переход между состоянием рисования и состоянием, когда можно сохранять рисунок и его загружать.
  • Метод paintEvent() вызывается для отображения того, что нарисовано на QImage в поле окна. Обратите внимание на self.update() в методе mouseMoveEvent(), тем самым как раз вызывается paintEvent(). Здесь тоже создаётся объект QPainter, с помощью метода drawImage(), которого содержимое объекта QImage оказывается в окне.
  • Обработка в методе keyPressEvent() нам уже знакома. При ctrl+s вызывается self.sv() - сохранить рисунок, при ctrl+l - вызывается метод self.ld() - загрузить рисунок. После загрузки вызывается метод paintEvent() и рисунок появляется в окне.

Рисунок 2. Рисование с использование объекта QImage
Рисунок 2. Рисование с использование объекта QImage

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

Пока всё!

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Программирование графики, это как воображаемое сделать изображаемым
Программирование графики, это как воображаемое сделать изображаемым