class QBaseGraph(QZoomingGraphicsView): def __init__(self, parent=None): super(QBaseGraph, self).__init__(parent) self.scene = None self._proxies = {} self._edge_paths = [] self._init_widgets() def _init_widgets(self): self.scene = QGraphicsScene(self.parent()) self.setScene(self.scene) # self.setDragMode(QGraphicsView.ScrollHandDrag) self.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform | QPainter.HighQualityAntialiasing) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.horizontalScrollBar().setSingleStep(16) self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.verticalScrollBar().setSingleStep(16) def _set_pos(self, widget, coord): """ Set the position of a widget in the scene with QTransform. Solves this problem: http://stackoverflow.com/questions/23342039/qgraphicsproxywidgetsetposqreal-x-qreal-y-doesnt-place-correctly-in-a-qgra :param widget: The widget to set position. :param coord: The new coordinate. :return: None """ widget.resetTransform() trans = widget.transform() widget.setTransform(trans.translate(coord.x(), coord.y())) def add_child(self, child): self._proxy(child) def remove_child(self, child): if child in self._proxies: self.scene.removeItem(self._proxies[child]) def _proxy(self, child): if child not in self._proxies: child.setParent(None) self._proxies[child] = self.scene.addWidget(child) return self._proxies[child] return self._proxies[child] def remove_all_children(self): for child in self._proxies: self.scene.removeItem(self._proxies[child]) child.setParent(self) self._proxies.clear() def request_relayout(self): raise NotImplementedError()
class AddItem(UsesQApplication): '''Tests for QGraphicsScene.add*''' qapplication = True def setUp(self): #Acquire resources super(AddItem, self).setUp() self.scene = QGraphicsScene() # While the scene does not inherits from QWidget, requires # an application to make the internals work. def tearDown(self): #Release resources del self.scene super(AddItem, self).tearDown() def testEllipse(self): #QGraphicsScene.addEllipse item = self.scene.addEllipse(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsEllipseItem)) def testLine(self): #QGraphicsScene.addLine item = self.scene.addLine(100, 100, 200, 200) self.assertTrue(isinstance(item, QGraphicsLineItem)) def testPath(self): #QGraphicsScene.addPath item = self.scene.addPath(QPainterPath()) self.assertTrue(isinstance(item, QGraphicsPathItem)) def testPixmap(self): #QGraphicsScene.addPixmap item = self.scene.addPixmap(QPixmap()) self.assertTrue(isinstance(item, QGraphicsPixmapItem)) def testPolygon(self): #QGraphicsScene.addPolygon points = [QPointF(0, 0), QPointF(100, 100), QPointF(0, 100)] item = self.scene.addPolygon(QPolygonF(points)) self.assertTrue(isinstance(item, QGraphicsPolygonItem)) def testRect(self): #QGraphicsScene.addRect item = self.scene.addRect(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsRectItem)) def testSimpleText(self): #QGraphicsScene.addSimpleText item = self.scene.addSimpleText('Monty Python 42') self.assertTrue(isinstance(item, QGraphicsSimpleTextItem)) def testText(self): #QGraphicsScene.addText item = self.scene.addText('Monty Python 42') self.assertTrue(isinstance(item, QGraphicsTextItem)) def testWidget(self): #QGraphicsScene.addWidget # XXX: printing some X11 error when using under PyQt4 item = self.scene.addWidget(QPushButton()) self.assertTrue(isinstance(item, QGraphicsProxyWidget))
class AddItem(UsesQApplication): """Tests for QGraphicsScene.add*""" qapplication = True def setUp(self): # Acquire resources super(AddItem, self).setUp() self.scene = QGraphicsScene() # While the scene does not inherits from QWidget, requires # an application to make the internals work. def tearDown(self): # Release resources del self.scene super(AddItem, self).tearDown() def testEllipse(self): # QGraphicsScene.addEllipse item = self.scene.addEllipse(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsEllipseItem)) def testLine(self): # QGraphicsScene.addLine item = self.scene.addLine(100, 100, 200, 200) self.assertTrue(isinstance(item, QGraphicsLineItem)) def testPath(self): # QGraphicsScene.addPath item = self.scene.addPath(QPainterPath()) self.assertTrue(isinstance(item, QGraphicsPathItem)) def testPixmap(self): # QGraphicsScene.addPixmap item = self.scene.addPixmap(QPixmap()) self.assertTrue(isinstance(item, QGraphicsPixmapItem)) def testPolygon(self): # QGraphicsScene.addPolygon points = [QPointF(0, 0), QPointF(100, 100), QPointF(0, 100)] item = self.scene.addPolygon(QPolygonF(points)) self.assertTrue(isinstance(item, QGraphicsPolygonItem)) def testRect(self): # QGraphicsScene.addRect item = self.scene.addRect(100, 100, 100, 100) self.assertTrue(isinstance(item, QGraphicsRectItem)) def testSimpleText(self): # QGraphicsScene.addSimpleText item = self.scene.addSimpleText("Monty Python 42") self.assertTrue(isinstance(item, QGraphicsSimpleTextItem)) def testText(self): # QGraphicsScene.addText item = self.scene.addText("Monty Python 42") self.assertTrue(isinstance(item, QGraphicsTextItem)) def testWidget(self): # QGraphicsScene.addWidget # XXX: printing some X11 error when using under PyQt4 item = self.scene.addWidget(QPushButton()) self.assertTrue(isinstance(item, QGraphicsProxyWidget))