Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Рисуем график функции в окне PyQt5
Рисование графиков в окне довольно стандартная процедуры, через которую проходят все изучающие графическое программирование. Здесь есть два момента, на которые стоит обратить внимание:
- График нужно представлять в привычном виде. Но в окне начало координат находится не в середине окна, а в левом верхнем углу. Кроме того, ось Y идёт сверху вниз. Следовательно придётся преобразовывать график соответствующим образом. Кроме того, следует также и учитывать масштаб. Например, значения функции sin(x) меняется от 1 до -1. Значит нужно дополнительное преобразование графика.
- Не удобно использовать, напрашивающуюся функцию drawPoint(). Она рисует точку, а чтобы получить сплошную линию придётся использовать очень малый шаг изменения по оси X. В таком случае мы получим цикл с большим количеством итераций. Но если для языка C++ это может быть и не слишком заметно, для Python мы получим очень медленно работающую программу. Правильно будет использовать функцию drawLine(). Шаг по X нужно будет брать равным 1, а значение функции вычислять. Линия, таким образом, будет проводиться между двумя соседними точками.
Ниже представлена программа, рисующая график функции cos(x) (с учётом сказанного выше). График перерисовывается при изменении размеров окна (см. Рисунок 1).
Пояснения к программе.
- Что нового в программе? Использование класса QPalette для установки цвета окна. Далее определяется цвет фона для данной палитры setColor(). Ну и QWidget.setPalette() окончательно устанавливает цвет фона окна.
- Для того, чтобы правильно нарисовать (в нужном месте) цифру 0 нужно в начале определить прямоугольник для неё. Это делается с помощью класса QRect. См. также задание шрифта setFont() и QFont.
- Остальная часть программы должны быть понятна. Но я всё таки добавлю. x1, y1 - это координаты конца предыдущего отрезка, i, f - координаты конца текущего отрезка.
Всё остальное знакомо вам из предыдущих статей:
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.