Я пытаюсь создать программу, которая позволит пользователям рисовать различные типы фигур, рисуя простые линии с помощью 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