Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Удаление нарисованных объектов PyQt [RSS Feed]

#1 Март 9, 2021 17:23:18

Omg_Zomg
Зарегистрирован: 2021-03-09
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление нарисованных объектов PyQt

Код, который рисует примитивы на изображении.

 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

Офлайн

#2 Март 9, 2021 17:35:50

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Удаление нарисованных объектов PyQt

:) То что написано Qтем то не вырубишь топором.

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

Если вам надо управлять объектами то смотрите в сторону pygame,sdl,sfml и тому подобного.



Офлайн

#3 Март 9, 2021 21:49:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Удаление нарисованных объектов PyQt

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

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

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



Отредактировано py.user.next (Март 9, 2021 21:56:08)

Офлайн

#4 Март 10, 2021 12:07:47

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Удаление нарисованных объектов PyQt

> то смотрите в сторону pygame,sdl

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

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

А я вот это проходил, правда давно, году в 1997… https://ru.wikipedia.org/wiki/Prehistorik_2



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

  • Начало
  • » GUI
  • » Удаление нарисованных объектов PyQt[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version