Как ограничить область в QGraphicsScene, куда можно перемещать пользовательский QGraphicsItem?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как ограничить область в QGraphicsScene, куда можно перемещать пользовательский QGraphicsItem?

Сообщение Anonymous »

У меня есть QGraphicsScene, в которой есть QGraphicsItems. Эти элементы являются подвижными, и я могу перемещать их по всей QGraphicsScene, но мне хотелось бы ограничить область, в которой эти элементы можно перемещать. Размеры QGraphicsScene не должны меняться. Я был бы очень признателен, если бы кто-нибудь дал мне пример того, как это сделать на Python.
Вот что у меня есть

Код: Выделить всё

from PySide2.QtCore import QPointF
from PySide2.QtWidgets import QWidget, QVBoxLayout, QGraphicsView, \
QGraphicsScene, QGraphicsPolygonItem, QApplication
from PySide2.QtGui import QPen, QColor, QBrush, QPolygonF

class Test(QWidget):
def __init__(self, parent=None):
super(Test, self).__init__(parent)
self.resize(1000, 800)
self.layout_ = QVBoxLayout()
self.view_ = GraphicsView()

self.layout_.addWidget(self.view_)
self.setLayout(self.layout_)

class GraphicsView(QGraphicsView):
def __init__(self):
super(GraphicsView, self).__init__()
self.scene_ = QGraphicsScene()
self.polygon_creation = self.PolyCreation()

self.scene_.setSceneRect(0, 0, 400, 400)
self.setScene(self.scene_)

self.polyCreator()

def polyCreator(self):
self.polygon_creation.poly()
polygon = self.polygon_creation.polygon()
new_poly = self.scene().addPolygon(polygon)
new_poly.setBrush(QBrush(QColor("gray")))
new_poly.setPen(QPen(QColor("gray")))
new_poly.setFlag(QGraphicsPolygonItem.ItemIsSelectable)
new_poly.setFlag(QGraphicsPolygonItem.ItemIsMovable)
new_poly.setFlag(QGraphicsPolygonItem.ItemIsFocusable)
new_poly.setPos(0, 0)

class PolyCreation(QGraphicsPolygonItem):
def __init__(self):
super().__init__()
self.setAcceptHoverEvents(True)

def poly(self):
self.poly_points = (QPointF(0, 0),
QPointF(0, 50),
QPointF(50, 50),
QPointF(50, 0))

self.shape = QPolygonF(self.poly_points)
self.setPolygon(self.shape)

if __name__ == '__main__':
app = QApplication([])
win = Test()
win.show()
app.exec_()
Я также нашел ответ в cpp, но не очень хорошо его понимаю, поэтому, если бы кто-нибудь мог «перевести» его на Python, это тоже было бы здорово.
/>Вот ссылка, ограничивающая подвижную область qgraphicsitem (пожалуйста, проверьте ответ @Robert)

Подробнее здесь: https://stackoverflow.com/questions/730 ... an-be-move
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как перевести/перетаскивать/перемещать QGraphicsScene?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • CSS GRIDS: сетки/Колонны сетки: SPAN 2,3 ... против сетки-Template-AREAS: «Область 1 Область 1 Область 2» ... для создан
    Anonymous » » в форуме Html
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • CSS GRIDS: сетки/Колонны сетки: SPAN 2,3 ... против сетки-Template-AREAS: «Область 1 Область 1 Область 2» ... для создан
    Anonymous » » в форуме CSS
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Отслеживание QGraphicsItem поверх видео
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Позиция QGraphicsItem после измененияboundingRect
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

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