Você está aqui: Python ::: PyQt GUI Toolkit ::: Gráficos Bitmap, QPainter e relacionados |
Como criar um programa de desenho de linhas no estilo AutoCAD usando PyQtQuantidade de visualizações: 93 vezes |
O código que mostro nesta dica é um programa de desenho de linhas e formas que poderia, facilmente, servir como ponto de partida para um programa CAD. O desenho da linha é iniciado ao pressionar o botão do mouse. A partir daí podemos movimentar o mouse de acordo com a nossa vontade, e a linha acompanha o ponteiro do mouse, sendo finalizada somente quando clicamos na área de desenho novamente. Este código é muito importante porque mostra como criar uma área de desenho personalizada a partir da classe QWidget. As linhas são desenhadas usando-se a função drawLine() do contexto de desenho QPainter, obtido da classe personalizada durante o evento paintEvent. Note os eventos do mouse mousePressEvent (ao pressionar o botão do mouse), mouseMoveEvent (ao mover o ponteiro do mouse) e mouseReleaseEvent (disparado ao liberarmos o botão do mouse). São estes os eventos que usei para iniciar e finalizar o desenho da linha. Usamos também a classe QPen para definir a espessura e a cor da linha a ser desenhada na janela do programa. Veja o código PyQt completo para o exemplo: # vamos importar os módulos necessários import sys from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget from PyQt6.QtGui import QPainter, QPen from PyQt6.QtCore import Qt, QPoint # vamos criar uma classe que herda de QMainWindow class JanelaPrincipal(QMainWindow): # construtor da classe def __init__(self): super().__init__() # vamos definir o título da janela self.setWindowTitle("Programa de desenho em PyQt") # agora definimos a posição e tamanho da janela self.setGeometry(300, 200, 800, 600) # criamos um objeto da classe CanvasDesenho self.canvas = CanvasDesenho(self) # e o colocamos na janela principal self.setCentralWidget(self.canvas) # classe Canvas personalizada class CanvasDesenho(QWidget): def __init__(self, parent=None): super().__init__(parent) self.parent = parent self.setGeometry(0, 0, 800, 600) # para verificar se estamos desenhando ou não self.desenhando = False # criamos duas instâncias da classe QPoint self.ultimo_ponto = QPoint() self.ponto_atual = QPoint() # uma lista para guardar os pontos self.pontos = [] # função para tratar o pressionamento do botão do mouse def mousePressEvent(self, event): if event.button() == Qt.MouseButton.LeftButton: # é o início das coordenadas de uma nova linha self.ultimo_ponto = event.pos() self.ponto_atual = event.pos() self.desenhando = True # função para tratar o evento mover do mouse def mouseMoveEvent(self, event): if self.desenhando: # atualizamos o ponto atual de acordo com a posição do mouse self.ponto_atual = event.pos() # e atualizamos a tela de desenho self.update() |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |