Найти - Пользователи
Полная версия: Удаление нарисованных объектов PyQt
Начало » GUI » Удаление нарисованных объектов PyQt
1
Omg_Zomg
Код, который рисует примитивы на изображении.
 import sys
from PyQt5 import QtCore, QtGui, QtWidgets  # PyQt5
class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.resize(600, 400)
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()
        self.pix = QtGui.QPixmap(600, 400)
        self.pix.fill(QtCore.Qt.white)
    def paintEvent(self, event):
        qp = QtGui.QPainter(self)
        qp.drawPixmap(0, 0, self.pix)
        br = QtGui.QBrush(QtGui.QColor("transparent"))
        qp.setBrush(br)
        if self.begin and self.end:
            rect = QtCore.QRect(self.begin, self.end)
            qp.drawRect(rect)
    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self.begin = event.pos()
            self.end = self.begin
            self.update()
    def mouseMoveEvent(self, event):
        if event.buttons() == QtCore.Qt.LeftButton:
            self.end = event.pos()
            self.update()
    def mouseReleaseEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            painter = QtGui.QPainter(self.pix)
            rect = QtCore.QRect(self.begin, self.end)
            painter.drawRect(rect)
            self.begin = self.end = QtCore.QPoint()
            self.update()
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MyWidget()
    window.show()
    sys.exit(app.exec_())

Как теперь правильно написать удаление фигуры? Допустим, накидал прямоугольников и нужно удалить лишние. Мышкой выделяю нужный и удаляю. Как это правильно сделать? Я просто новичок в PyQt
doza_and
:) То что написано Qтем то не вырубишь топором.

Не знаю как там в Qt но обычно понятие прямоугольник есть только на момент выполнения qp.drawRect(rect) Те ничего выделить нельзя. Чтобы стереть один объект надо стереть все, а потом нарисовать все кроме того что стерли.

Если вам надо управлять объектами то смотрите в сторону pygame,sdl,sfml и тому подобного.
py.user.next
Там надо делать объекты, потом размещать их друг на друге, а потом уже любой из них раскрашивать и перекрашивать или вообще скрывать. То есть это не через рисование одного на другом делается, а через изменение свойств объектов.

doza_and
то смотрите в сторону pygame,sdl
Вот они так и устроены. Есть спрайты (прямоугольники), на которых идёт рисование, а мультипликация вся выполняется через смену этих спрайтов. Никто их не перерисовывает, их просто меняют один на другой.

Также бывает, что рисуют одну длинную картинку и двигают окно отображения по ней. Так устроены игры по типу Super Mario. Я вот в эту играл (в смысле прошёл её), она довольно интересная. Похожа на Super Mario, только более творческая. Но у этой исходники открыты и можно посмотреть, что к чему там.
Rodegast
> то смотрите в сторону pygame,sdl

Лучше смотри в сторону QGraphicsScene

> Я вот в эту играл (в смысле прошёл её), она довольно интересная.

А я вот это проходил, правда давно, году в 1997… https://ru.wikipedia.org/wiki/Prehistorik_2
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB