Я знаю, что на этот вопрос отвечал много раз, особенно в версии QT C ++, но я не очень хорош в C ++, и я не могу найти решение. < /p>
< P> У меня есть код с QGraphicsView с прямоугольником, сделанным из QGraphicsPolygonitem в центре. Я пытаюсь найти способ сделать QGraphicsScene трансформируемым/подвижным/перетаскиваемым пользователем (все будет в порядке, я просто пытаюсь дать пользователю возможность перемещаться по сцене). Но ни одна из моих попыток не сработала. P>self.horizontalScrollBar().setValue() и self.verticalscrollbar (). setValue ()
[*] self._scene.setSceneRect(x,y,w,h)
[*] Настройка якоря на Achorundermouse и noanchor
[*] Использование transtate ()
Ничто из этого не делает мою сцену двигаться ... только То, что заставило мою сцену перемещаться, это setScenerect () , но как только я поместил ее под MouseMoveEvent (Self, Event) , она перестает работать. Может ли кто -нибудь помочь мне научиться перемещаться по этому прямоугольнику в сцене?from PyQt5.QtGui import QColor, QPolygonF, QPen, QBrush
from PyQt5.QtCore import Qt, QPointF, QPoint, pyqtSignal
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGraphicsView, QGraphicsScene, QGraphicsPolygonItem, QApplication, \
QFrame, QSizePolicy
points_list = [[60.1, 19.6, 0.0], [60.1, 6.5, 0.0], [60.1, -6.5, 0.0], [60.1, -19.6, 0.0], [60.1, -19.6, 0.0],
[20.0, -19.6, 0.0], [-20, -19.6, 0.0], [-60.1, -19.6, 0.0], [-60.1, -19.6, 0.0], [-60.1, -6.5, 0.0],
[-60.1, 6.5, 0.0], [-60.1, 19.6, 0.0], [-60.1, 19.6, 0.0], [-20.0, 19.6, 0.0], [20.0, 19.6, 0.0],
[60.1, 19.6, 0.0]]
class MainWindow(QDialog):
def __init__(self, parent=None):
QDialog.__init__(self, parent=parent)
self.create()
def create(self, **kwargs):
main_layout = QVBoxLayout()
graphics = MainGraphicsWidget()
main_layout.addWidget(graphics)
self.setLayout(main_layout)
class MainGraphicsWidget(QGraphicsView):
zoom_signal = pyqtSignal(bool)
def __init__(self, parent=None):
super(MainGraphicsWidget, self).__init__(parent)
self._scene = QGraphicsScene(backgroundBrush=Qt.gray)
self.__zoom = 0
self.setScene(self._scene)
self.setTransformationAnchor(QGraphicsView.NoAnchor)
#self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setBackgroundBrush(QBrush(QColor(30, 30, 30)))
self.setFrameShape(QFrame.NoFrame)
self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
self.sceneRect = self._scene.sceneRect()
self.testButton = GraphicsButton()
self._scene.addItem(self.testButton)
#self.horizontalScrollBar().setValue(199)
#self.verticalScrollBar().setValue(500)
def mouseMoveEvent(self, event):
modifierPressed = QApplication.keyboardModifiers()
if (modifierPressed & Qt.AltModifier) == Qt.AltModifier and event.buttons() == Qt.LeftButton:
#self._scene.setSceneRect(event.pos().x(), event.pos().y(), self.sceneRect.width(), self.sceneRect.height())
pass
super(MainGraphicsWidget, self).mouseMoveEvent(event)
def wheelEvent(self, event):
if event.angleDelta().y() > 0:
factor = 1.25
self.__zoom += 1
else:
factor = 0.8
self.__zoom -= 1
self.scale(factor, factor)
self.zoom_signal.emit(self.__zoom < 10)
class GraphicsButton(QGraphicsPolygonItem):
def __init__(self, parent=None):
super(GraphicsButton, self).__init__(parent)
self.myPolygon = QPolygonF([QPointF(v1, v2) for v1, v2, v3 in points_list])
self.setPen(QPen(QColor(0, 0, 0), 0, Qt.SolidLine, Qt.FlatCap, Qt.MiterJoin))
self.setPolygon(self.myPolygon)
self.setBrush(QColor(220, 40, 30))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.setGeometry(500, 100, 500, 900)
window.show()
sys.exit(app.exec_())
Подробнее здесь: https://stackoverflow.com/questions/592 ... phicsscene
Как перевести/перетаскивать/перемещать QGraphicsScene? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение