![]() |
|
||||
Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
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: 363 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: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
# 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()
# função para tratar a liberação do botão do mouse
def mouseReleaseEvent(self, event):
# o desenho terminou
if event.button() == Qt.MouseButton.LeftButton:
self.desenhando = False
# registra as coordenadas x e y do ponto
ponto = (self.ultimo_ponto, self.ponto_atual)
# adicionamos este ponto à lista de pontos
self.pontos.append(ponto)
# e atualizamos a área de desenho
self.update()
# função para tratar o evento de pintura do canvas
def paintEvent(self, event):
painter = QPainter(self)
pen = QPen()
pen.setWidth(2)
pen.setColor(Qt.GlobalColor.black)
painter.setPen(pen)
# e agora desenhamos as linhas na tela de acordo
# com as coordenadas dos pontos
for ponto in self.pontos:
painter.drawLine(ponto[0], ponto[1])
# mostra a linha atual sem finalizá-la
if self.desenhando:
painter.drawLine(self.ultimo_ponto, self.ponto_atual)
if __name__ == "__main__":
# cria a aplicação
app = QApplication(sys.argv)
# cria a janela principal e a coloca visível
janela_principal = JanelaPrincipal()
janela_principal.show()
# executa a aplicação
app.exec()
|
|
|
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 |






