Рисование многоугольников с помощью pyqt5Python

Программы на Python
Ответить
Anonymous
 Рисование многоугольников с помощью pyqt5

Сообщение Anonymous »

Привет
Я пытаюсь создать программу, которая позволит пользователям рисовать различные типы фигур, рисуя простые линии с помощью Pyqt5.Программа должна определить, закрыта ли фигура, а затем автоматически заполнить область внутри нее определенным цветом (например, красным в этом коде)
Проблема: мне нужно добавить модификацию, если внутри этого многоугольника нарисована еще одна линия и делит многоугольник на несколько частей, цвет внутри этой созданной зоны можно изменить на что-то другое (например, на синий по умолчанию), но его также можно редактировать (с помощью щелчка правой кнопкой мыши), чтобы изменить дополнительные параметры цвета и, наконец, получить эффект наведения при наведении курсора мыши. перемещается по ним, так как пользователь может почувствовать, что многоугольник разделен на разные зоны.
Я приведу пример ниже, чтобы вы лучше поняли, что я имею в виду, вместе с code.tnx
Сначала создадим простой многоугольник:
Изображение

Затем мы попробуем разделить его на разные зоны:
Изображение

А вот мой код:
import sys
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsLineItem, QMenu
from PyQt5.QtCore import Qt, QPointF,QLineF
from PyQt5.QtGui import QPainter, QPen, QBrush, QColor , QPolygonF

class UserLineItem(QGraphicsLineItem):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setPen(QPen(Qt.black, 5))

def p1(self):
return self.line().p1()

def p2(self):
return self.line().p2()

def setP1(self, p):
line = self.line()
if line.p1() != p:
line.setP1(p)
self.setLine(line)

def setP2(self, p):
line = self.line()
if line.p2() != p:
line.setP2(p)
self.setLine(line)

class MeasuredGraphicsView(QGraphicsView):
gridSpacing = 25
def __init__(self):
super().__init__()

self.setRenderHint(QPainter.Antialiasing)
self.resize(800, 600)

self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.scene.setSceneRect(-500, -500, 1000, 1000)

self.currentLine = None
self.vertexLines = {}

def drawBackground(self, qp, rect):
normal = QPen(Qt.lightGray, 1, Qt.DotLine)
dark = QPen(Qt.black, 1, Qt.DotLine)

rect &= self.scene.sceneRect()
left, top, right, bottom = rect.getCoords()

qp.save()

x = left // self.gridSpacing * self.gridSpacing
while x

Подробнее здесь: https://stackoverflow.com/questions/792 ... sing-pyqt5
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»