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 PyQt

Quantidade 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()


Link para compartilhar na Internet ou com seus amigos:

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

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 26 usuários muito felizes estudando em nosso site.