Evolution de la chose : http://unblogdecolin.blogspot.fr/2016/11/le-retour-du-node-graph-en-pyside.html
Ici je vais vous présenter une base pour faire un "node graph" ou viewport 2D... mon exemple est très simple il y a seulement deux éllipses en guise de "nodes",pour l'instant on regarde juste le paramétrage de base de notre QGraphicsView qui est notre support de base, peut être un jour je vous représenterai un ticket pour les nodes et leurs connections.
Un QGraphicsView avec une grille, deux items sélectionnable et bougeable, un lasso de sélection et un alt-drag pour bouger dans la vue.
from PyQt4 import QtGui, QtCore class View(QtGui.QGraphicsView): def __init__(self): QtGui.QGraphicsView.__init__(self) self.resize(500, 500) #on place le point de pivot des transformation au niveau du pointeur self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QtGui.QGraphicsView.AnchorViewCenter) #on cache les scrollBar self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) #active l’antialiasing self.setRenderHint(QtGui.QPainter.Antialiasing) #creation du scene qui contient les items et sera dans la QView self.scene = QtGui.QGraphicsScene() self.scene.setSceneRect(-50000, -50000, 100000, 100000) #Ajout d'une grille en fond self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(60,60,60), QtCore.Qt.CrossPattern)) #creation de deux elipse simple a la scene, selectable et movable ep = self.scene.addEllipse (20, 40, 50, 50) ep.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True) ep.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True) epS = self.scene.addEllipse (20, 120, 50, 50) epS.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True) epS.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True) #parametrage du drag mode rubber …. permet davoir un lasso rectangulaire de selection self.setDragMode(QtGui.QGraphicsView.RubberBandDrag) self.setRubberBandSelectionMode(QtCore.Qt.IntersectsItemShape) self.setScene(self.scene) #alt drag scroll bar, permet de se deplacer dans le graph grace a la touche alt. def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Alt: self.setDragMode(QtGui.QGraphicsView.ScrollHandDrag) def keyReleaseEvent(self, event): if event.key() == QtCore.Qt.Key_Alt: self.setDragMode(QtGui.QGraphicsView.RubberBandDrag) d = View() d.show()
Aucun commentaire:
Enregistrer un commentaire