Шаг 191.
Библиотека PyQt5.
Работа с графикой. Класс QPainter. Преобразование систем координат

    На этом шаге мы рассмотрим способы преобразования систем координат.

    Существуют две системы координат:

    При рисовании координаты из логической системы координат преобразуются в систему координат устройства. По умолчанию эти две системы координат совпадают.

    В некоторых случаях возникает необходимость изменить координаты. Выполнить изменение физической системы координат позволяет метод

  setViewport (<X>, <Y>, <Ширина>, <Высота>) или 
  setViewport (<QRect>), 
а получить текущие значения можно с помощью метода viewport(). Выполнить изменение логической системы координат позволяет метод
  setWindow(<X>, <Y>, <Ширина>, <Высота>)  или 
  setWindow(<QRect>), 
а получить текущие значения можно с помощью метода window() класса QPainter.

    Произвести дополнительную трансформацию системы координат позволяют следующие методы того же класса QPainter:

    Все указанные трансформации влияют на последующие операции рисования и не изменяют ранее нарисованные фигуры. Чтобы после трансформации восстановить систему координат, следует предварительно сохранить состояние в стеке с помощью метода save(), а после окончания рисования вызвать метод restore():

  painter.save()     # Сохраняем состояние
                     # Трансформируем и рисуем 
  painter.restore()  # Восстанавливаем состояние

    Несколько трансформаций можно произвести последовательно друг за другом. При этом надо учитывать, что порядок следования трансформаций имеет значение.

    Если одна и та же последовательность трансформаций выполняется несколько раз, то ее можно сохранить в экземпляре класса QTransform, а затем установить с помощью метода setTransform(). Пример:

  transform = QtGui.QTransform()
  transform.translate(105, 105)
  transform.rotate(45.0)
  painter.setTransform(transform)
  painter.fillRect(-25, -25, 50, 50, QtCore.Qt.green)

    На следующем шаге мы рассмотрим сохранение команд рисования в файл.




Предыдущий шаг Содержание Следующий шаг