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()
