Найти тему
programmer's notes (python and more)

Программирование на языке Python. Графика PyQt5. Модуль QtGui

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Библиотека PyQt5 и графика модуля QtGui

Наконец добрались до графики PyQt5. У нас есть раздел по программированию графики. Но там используется библиотека pillow, с помощью которой можно создавать графические файлы. Сейчас поговорим о рисовании непосредственно в окне, так сказать, вживую.

Для рисования нам понадобится модуль QtGui. О нём много чего можно рассказать, но сегодня только один пример рисования, использующий данный модуль.

Ниже представлена программа, демонстрирующая некоторые возможности рисования с помощью PyQt5.QtGui. Окна программы показаны на рисунках 1 - 6. Рисунок 1 - начальное окно программы. Далее нажатие кнопки Рисовать приводит к появлению тех или иных графических элементов. И так по кругу (от Рисунка 6 к рисунка 2 и т.д.). Нам многое уже здесь знакомо. И создание окна (QWidget) и работа кнопки QPushButton.

На что главное следует обратить внимание. Это на событие paintEvent(). Этот метод вызывается при перерисовке окна. Это в частности происходит, когда мы меняем размер окна. Но можно вызвать этот метод программно. Для этого вызывается QWidget.repaint(). Что и используется в нашей программе. Для того, чтобы использовать метод paintEvent() в нём создаётся объект класса QtGui.QPainter. Далее полученный объект позволяет использовать методы QPainter.begin() и QPainter.end(). Между этими методами (если begin() возвратил True) как раз и можно осуществлять рисование в окне.

Фрагмента программы: конструктор и метод paintEvent. Весь текст программы см. ниже по ссылке
Фрагмента программы: конструктор и метод paintEvent. Весь текст программы см. ниже по ссылке

Продолжим рассматривать некоторые детали представленной программы. В классе Example создаётся список self.fn. Он содержит ссылки на методы класса, которые создают то или иное графическое изображение. Запуск таких функций см. в методе paintEvent(). Переменная self.cnf содержит номер функции, которая будет запускаться.

Фрагмент программы: методы рисования и основная часть программы. Весь текст программы см. ниже по ссылке
Фрагмент программы: методы рисования и основная часть программы. Весь текст программы см. ниже по ссылке
primer236.py

Метод paint() запускается нажатием кнопки. При этом увеличивается индекс функции, при достижении предельного значения он обнуляется. Ну, а далее запускается self.repaint(), который инициализирует событие paintEvent(). Ниже расположены методы рисования разных фигур (они прокомментированы). Важно обратить внимание на следующие две вещи:

  • Метод setPen() устанавливает параметры пера (pen). Перо определяет цвет и параметры линии рисования: линии, геометрические фигуры, шрифт, точка.
  • Дополнительные параметры шрифта определяются методом setFont(). Название шрифта и его размер.
  • Метод setBrush() определяет параметры кисти для закраски областей. В нашем случае прямоугольников.

Есть также набор для рисования примитивов. В нашей программе это

  • drawRect() — рисование закрашенных прямоугольников;
  • drawText() — рисование текста в окне. Обращаю внимание на метод QWidget.rect(), который определяет рабочую область окна;
  • drawLine() — рисование линии, согласно определённого ранее пера.
  • drawEllipse() — рисование эллипса, вписанного в указанный прямоугольник. В случае квадрата получаем окружность.

Рисунок 1. Окно рисования
Рисунок 1. Окно рисования

Рисунок 2. Российский флаг
Рисунок 2. Российский флаг

Рисунок 3. Рисования текста
Рисунок 3. Рисования текста

Рисунок 4. Цветные прямоугольники
Рисунок 4. Цветные прямоугольники

Рисунок 5. Окружность точечной линией
Рисунок 5. Окружность точечной линией

Рисунок 6. Рисование стрелки
Рисунок 6. Рисование стрелки

Мы не заканчиваем тему графики в библиотеке PyQt5. Будут ещё статьи.

Ну, пока всё!

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

Вы рисуете слишком профессионально. Нарисуйте мне просто круг или квадрат
Вы рисуете слишком профессионально. Нарисуйте мне просто круг или квадрат