PyQt5 - API de desenho

Todos QWidgetas classes em PyQt são subclassificadas da classe QPaintDevice. UMAQPaintDeviceé uma abstração de um espaço bidimensional que pode ser desenhado usando um QPainter. As dimensões do dispositivo de pintura são medidas em pixels a partir do canto superior esquerdo.

QPainterclasse executa pintura de baixo nível em widgets e outros dispositivos pintáveis, como impressora. Normalmente, é usado no evento de pintura do widget. oQPaintEvent ocorre sempre que a aparência do widget é atualizada.

O pintor é ativado chamando o begin() método, enquanto o end()método o desativa. No meio, o padrão desejado é pintado por métodos adequados, conforme listado na tabela a seguir.

Sr. Não. Métodos e Descrição
1

begin()

Começa a pintar no dispositivo de destino

2

drawArc()

Desenha um arco entre o ângulo inicial e final

3

drawEllipse()

Desenha uma elipse dentro de um retângulo

4

drawLine()

Desenha uma linha com as coordenadas do ponto final especificadas

5

drawPixmap()

Extrai o pixmap do arquivo de imagem e o exibe na posição especificada

6

drwaPolygon()

Desenha um polígono usando uma matriz de coordenadas

7

drawRect()

Desenha um retângulo começando na coordenada superior esquerda com a largura e altura fornecidas

8

drawText()

Mostra o texto nas coordenadas fornecidas

9

fillRect()

Preenche o retângulo com o parâmetro QColor

10

setBrush()

Define um estilo de pincel para pintura

11

setPen()

Define a cor, tamanho e estilo da caneta a ser usada para desenhar

Exemplo

No código a seguir, vários métodos de métodos de desenho de PyQt são usados.

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Example(QWidget):
   def __init__(self):
      super(Example, self).__init__()
      self.initUI()

   def initUI(self):
      self.text = "hello world"
      self.setGeometry(100,100, 400,300)
      self.setWindowTitle('Draw Demo')
      self.show()

   def paintEvent(self, event):
      qp = QPainter()
      qp.begin(self)
      qp.setPen(QColor(Qt.red))
      qp.setFont(QFont('Arial', 20))
      qp.drawText(10,50, "hello Python")
      qp.setPen(QColor(Qt.blue))
      qp.drawLine(10,100,100,100)
      qp.drawRect(10,150,150,100)
      qp.setPen(QColor(Qt.yellow))
      qp.drawEllipse(100,50,100,50)
      qp.drawPixmap(220,10,QPixmap("pythonlogo.png"))
      qp.fillRect(20,175,130,70,QBrush(Qt.SolidPattern))
      qp.end()

def main():
   app = QApplication(sys.argv)
   ex = Example()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

O código acima produz a seguinte saída -