Рисование фигур в Pyside

OmgZomg

Новичок
Пользователь
Апр 22, 2020
30
2
8
Привожу код, который рисует точки и прямоугольники.
Python:
import sys

from PySide2 import QtCore, QtGui, QtWidgets

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(30,30,600,400)
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()
        self.show()

    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        br = QtGui.QBrush(QtGui.QColor("transparent"))
        qp.setBrush(br)
        qp.drawRect(QtCore.QRect(self.begin, self.end))
        qp.end()



    def mousePressEvent(self, event):
        self.begin = event.pos()
        self.end = event.pos()
        self.update()

    def mouseMoveEvent(self, event):
        self.end = event.pos()
        self.update()

    def mouseReleaseEvent(self, event):
        self.begin = event.pos()
        self.end = event.pos()
        self.update()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyWidget()
    window.show()
    app.aboutToQuit.connect(app.deleteLater)
    sys.exit(app.exec_())

Почему фигуры исчезают? Мне нужно отобразить несколько точек и прямоугольников в окне. Не могу разобраться как их сохранить
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Почему фигуры исчезают?
Событие paintEvent перерисовывает их каждый раз
Мне нужно отобразить несколько точек и прямоугольников в окне. Не могу разобраться как их сохранить
Чтобы сохранить все точки и прямоугольники нужно их запоминать и перерисовывать каждый раз все сохраненные элементы.
Вот пример:
Python:
import sys

from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import Qt


class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(30, 30, 600, 400)
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()
        # список всех точек для отображения
        self.dots = []
        # флаг для показа контура прямоугольника
        self.show_contour = False
        self.show()

    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        br = QtGui.QBrush(QtGui.QColor("transparent"))
        qp.setBrush(br)
        # параметры линии
        qp.setPen(QtGui.QPen(Qt.black, 3, Qt.SolidLine))

        # показываем контур текущего прямоугольника
        if self.show_contour:
            qp.drawRect(QtCore.QRect(self.begin, self.end))

        # отрисовка всех точек и прямоугольников
        for begin, end in zip(self.dots[::2], self.dots[1::2]):
            qp.drawRect(QtCore.QRect(begin, end))
        qp.end()

    def mousePressEvent(self, event):
        self.begin = event.pos()
        self.show_contour = False
        # добавляем начальную точку в список точек
        self.dots.append(self.begin)
        self.update()

    def mouseMoveEvent(self, event):
        self.end = event.pos()
        # показываем контур только при движении мыши
        self.show_contour = True
        self.update()

    def mouseReleaseEvent(self, event):
        self.end = event.pos()
        self.show_contour = False
        # добавляем конечную точку в список точек
        self.dots.append(self.end)
        self.update()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyWidget()
    window.show()
    app.aboutToQuit.connect(app.deleteLater)
    sys.exit(app.exec_())
 
  • Мне нравится
Реакции: OmgZomg

OmgZomg

Новичок
Пользователь
Апр 22, 2020
30
2
8
Благодарю Вас!
 

Форум IT Специалистов