aboutsummaryrefslogtreecommitdiffstats
path: root/examples/graphicsview/diagramscene/diagramscene.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/graphicsview/diagramscene/diagramscene.py')
-rwxr-xr-xexamples/graphicsview/diagramscene/diagramscene.py173
1 files changed, 105 insertions, 68 deletions
diff --git a/examples/graphicsview/diagramscene/diagramscene.py b/examples/graphicsview/diagramscene/diagramscene.py
index 51c38b0..ea0af84 100755
--- a/examples/graphicsview/diagramscene/diagramscene.py
+++ b/examples/graphicsview/diagramscene/diagramscene.py
@@ -1,17 +1,54 @@
#!/usr/bin/env python
-# This is only needed for Python v2 but is harmless for Python v3.
-#import sip
-#sip.setapi('QString', 2)
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the PySide examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
import math
-from PySide2 import QtCore, QtGui
+from PySide2 import QtCore, QtGui, QtWidgets
import diagramscene_rc
-class Arrow(QtGui.QGraphicsLineItem):
+class Arrow(QtWidgets.QGraphicsLineItem):
def __init__(self, startItem, endItem, parent=None, scene=None):
super(Arrow, self).__init__(parent, scene)
@@ -19,7 +56,7 @@ class Arrow(QtGui.QGraphicsLineItem):
self.myStartItem = startItem
self.myEndItem = endItem
- self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)
+ self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True)
self.myColor = QtCore.Qt.black
self.setPen(QtGui.QPen(self.myColor, 2, QtCore.Qt.SolidLine,
QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin))
@@ -101,19 +138,19 @@ class Arrow(QtGui.QGraphicsLineItem):
painter.drawLine(myLine)
-class DiagramTextItem(QtGui.QGraphicsTextItem):
- lostFocus = QtCore.Signal(QtGui.QGraphicsTextItem)
+class DiagramTextItem(QtWidgets.QGraphicsTextItem):
+ lostFocus = QtCore.Signal(QtWidgets.QGraphicsTextItem)
- selectedChange = QtCore.Signal(QtGui.QGraphicsItem)
+ selectedChange = QtCore.Signal(QtWidgets.QGraphicsItem)
def __init__(self, parent=None, scene=None):
super(DiagramTextItem, self).__init__(parent, scene)
- self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
- self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable)
+ self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
+ self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable)
def itemChange(self, change, value):
- if change == QtGui.QGraphicsItem.ItemSelectedChange:
+ if change == QtWidgets.QGraphicsItem.ItemSelectedChange:
self.selectedChange.emit(self)
return value
@@ -128,7 +165,7 @@ class DiagramTextItem(QtGui.QGraphicsTextItem):
super(DiagramTextItem, self).mouseDoubleClickEvent(event)
-class DiagramItem(QtGui.QGraphicsPolygonItem):
+class DiagramItem(QtWidgets.QGraphicsPolygonItem):
Step, Conditional, StartEnd, Io = range(4)
def __init__(self, diagramType, contextMenu, parent=None, scene=None):
@@ -165,8 +202,8 @@ class DiagramItem(QtGui.QGraphicsPolygonItem):
QtCore.QPointF(-120, -80)])
self.setPolygon(self.myPolygon)
- self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
- self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)
+ self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True)
+ self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True)
def removeArrow(self, arrow):
try:
@@ -198,21 +235,21 @@ class DiagramItem(QtGui.QGraphicsPolygonItem):
self.myContextMenu.exec_(event.screenPos())
def itemChange(self, change, value):
- if change == QtGui.QGraphicsItem.ItemPositionChange:
+ if change == QtWidgets.QGraphicsItem.ItemPositionChange:
for arrow in self.arrows:
arrow.updatePosition()
return value
-class DiagramScene(QtGui.QGraphicsScene):
+class DiagramScene(QtWidgets.QGraphicsScene):
InsertItem, InsertLine, InsertText, MoveItem = range(4)
itemInserted = QtCore.Signal(DiagramItem)
- textInserted = QtCore.Signal(QtGui.QGraphicsTextItem)
+ textInserted = QtCore.Signal(QtWidgets.QGraphicsTextItem)
- itemSelected = QtCore.Signal(QtGui.QGraphicsItem)
+ itemSelected = QtCore.Signal(QtWidgets.QGraphicsItem)
def __init__(self, itemMenu, parent=None):
super(DiagramScene, self).__init__(parent)
@@ -278,7 +315,7 @@ class DiagramScene(QtGui.QGraphicsScene):
item.setPos(mouseEvent.scenePos())
self.itemInserted.emit(item)
elif self.myMode == self.InsertLine:
- self.line = QtGui.QGraphicsLineItem(QtCore.QLineF(mouseEvent.scenePos(),
+ self.line = QtWidgets.QGraphicsLineItem(QtCore.QLineF(mouseEvent.scenePos(),
mouseEvent.scenePos()))
self.line.setPen(QtGui.QPen(self.myLineColor, 2))
self.addItem(self.line)
@@ -339,7 +376,7 @@ class DiagramScene(QtGui.QGraphicsScene):
return False
-class MainWindow(QtGui.QMainWindow):
+class MainWindow(QtWidgets.QMainWindow):
InsertTextButton = 10
def __init__(self):
@@ -357,12 +394,12 @@ class MainWindow(QtGui.QMainWindow):
self.createToolbars()
- layout = QtGui.QHBoxLayout()
+ layout = QtWidgets.QHBoxLayout()
layout.addWidget(self.toolBox)
- self.view = QtGui.QGraphicsView(self.scene)
+ self.view = QtWidgets.QGraphicsView(self.scene)
layout.addWidget(self.view)
- self.widget = QtGui.QWidget()
+ self.widget = QtWidgets.QWidget()
self.widget.setLayout(layout)
self.setCentralWidget(self.widget)
@@ -508,15 +545,15 @@ class MainWindow(QtGui.QMainWindow):
self.underlineAction.setChecked(font.underline())
def about(self):
- QtGui.QMessageBox.about(self, "About Diagram Scene",
+ QtWidgets.QMessageBox.about(self, "About Diagram Scene",
"The <b>Diagram Scene</b> example shows use of the graphics framework.")
def createToolBox(self):
- self.buttonGroup = QtGui.QButtonGroup()
+ self.buttonGroup = QtWidgets.QButtonGroup()
self.buttonGroup.setExclusive(False)
self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked)
- layout = QtGui.QGridLayout()
+ layout = QtWidgets.QGridLayout()
layout.addWidget(self.createCellWidget("Conditional", DiagramItem.Conditional),
0, 0)
layout.addWidget(self.createCellWidget("Process", DiagramItem.Step), 0,
@@ -524,31 +561,31 @@ class MainWindow(QtGui.QMainWindow):
layout.addWidget(self.createCellWidget("Input/Output", DiagramItem.Io),
1, 0)
- textButton = QtGui.QToolButton()
+ textButton = QtWidgets.QToolButton()
textButton.setCheckable(True)
self.buttonGroup.addButton(textButton, self.InsertTextButton)
textButton.setIcon(QtGui.QIcon(QtGui.QPixmap(':/images/textpointer.png')
.scaled(30, 30)))
textButton.setIconSize(QtCore.QSize(50, 50))
- textLayout = QtGui.QGridLayout()
+ textLayout = QtWidgets.QGridLayout()
textLayout.addWidget(textButton, 0, 0, QtCore.Qt.AlignHCenter)
- textLayout.addWidget(QtGui.QLabel("Text"), 1, 0,
+ textLayout.addWidget(QtWidgets.QLabel("Text"), 1, 0,
QtCore.Qt.AlignCenter)
- textWidget = QtGui.QWidget()
+ textWidget = QtWidgets.QWidget()
textWidget.setLayout(textLayout)
layout.addWidget(textWidget, 1, 1)
layout.setRowStretch(3, 10)
layout.setColumnStretch(2, 10)
- itemWidget = QtGui.QWidget()
+ itemWidget = QtWidgets.QWidget()
itemWidget.setLayout(layout)
- self.backgroundButtonGroup = QtGui.QButtonGroup()
+ self.backgroundButtonGroup = QtWidgets.QButtonGroup()
self.backgroundButtonGroup.buttonClicked.connect(self.backgroundButtonGroupClicked)
- backgroundLayout = QtGui.QGridLayout()
+ backgroundLayout = QtWidgets.QGridLayout()
backgroundLayout.addWidget(self.createBackgroundCellWidget("Blue Grid",
':/images/background1.png'), 0, 0)
backgroundLayout.addWidget(self.createBackgroundCellWidget("White Grid",
@@ -561,48 +598,48 @@ class MainWindow(QtGui.QMainWindow):
backgroundLayout.setRowStretch(2, 10)
backgroundLayout.setColumnStretch(2, 10)
- backgroundWidget = QtGui.QWidget()
+ backgroundWidget = QtWidgets.QWidget()
backgroundWidget.setLayout(backgroundLayout)
- self.toolBox = QtGui.QToolBox()
- self.toolBox.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Ignored))
+ self.toolBox = QtWidgets.QToolBox()
+ self.toolBox.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Ignored))
self.toolBox.setMinimumWidth(itemWidget.sizeHint().width())
self.toolBox.addItem(itemWidget, "Basic Flowchart Shapes")
self.toolBox.addItem(backgroundWidget, "Backgrounds")
def createActions(self):
- self.toFrontAction = QtGui.QAction(
+ self.toFrontAction = QtWidgets.QAction(
QtGui.QIcon(':/images/bringtofront.png'), "Bring to &Front",
self, shortcut="Ctrl+F", statusTip="Bring item to front",
triggered=self.bringToFront)
- self.sendBackAction = QtGui.QAction(
+ self.sendBackAction = QtWidgets.QAction(
QtGui.QIcon(':/images/sendtoback.png'), "Send to &Back", self,
shortcut="Ctrl+B", statusTip="Send item to back",
triggered=self.sendToBack)
- self.deleteAction = QtGui.QAction(QtGui.QIcon(':/images/delete.png'),
+ self.deleteAction = QtWidgets.QAction(QtGui.QIcon(':/images/delete.png'),
"&Delete", self, shortcut="Delete",
statusTip="Delete item from diagram",
triggered=self.deleteItem)
- self.exitAction = QtGui.QAction("E&xit", self, shortcut="Ctrl+X",
+ self.exitAction = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+X",
statusTip="Quit Scenediagram example", triggered=self.close)
- self.boldAction = QtGui.QAction(QtGui.QIcon(':/images/bold.png'),
+ self.boldAction = QtWidgets.QAction(QtGui.QIcon(':/images/bold.png'),
"Bold", self, checkable=True, shortcut="Ctrl+B",
triggered=self.handleFontChange)
- self.italicAction = QtGui.QAction(QtGui.QIcon(':/images/italic.png'),
+ self.italicAction = QtWidgets.QAction(QtGui.QIcon(':/images/italic.png'),
"Italic", self, checkable=True, shortcut="Ctrl+I",
triggered=self.handleFontChange)
- self.underlineAction = QtGui.QAction(
+ self.underlineAction = QtWidgets.QAction(
QtGui.QIcon(':/images/underline.png'), "Underline", self,
checkable=True, shortcut="Ctrl+U",
triggered=self.handleFontChange)
- self.aboutAction = QtGui.QAction("A&bout", self, shortcut="Ctrl+B",
+ self.aboutAction = QtWidgets.QAction("A&bout", self, shortcut="Ctrl+B",
triggered=self.about)
def createMenus(self):
@@ -624,10 +661,10 @@ class MainWindow(QtGui.QMainWindow):
self.editToolBar.addAction(self.toFrontAction)
self.editToolBar.addAction(self.sendBackAction)
- self.fontCombo = QtGui.QFontComboBox()
+ self.fontCombo = QtWidgets.QFontComboBox()
self.fontCombo.currentFontChanged.connect(self.currentFontChanged)
- self.fontSizeCombo = QtGui.QComboBox()
+ self.fontSizeCombo = QtWidgets.QComboBox()
self.fontSizeCombo.setEditable(True)
for i in range(8, 30, 2):
self.fontSizeCombo.addItem(str(i))
@@ -635,8 +672,8 @@ class MainWindow(QtGui.QMainWindow):
self.fontSizeCombo.setValidator(validator)
self.fontSizeCombo.currentIndexChanged.connect(self.fontSizeChanged)
- self.fontColorToolButton = QtGui.QToolButton()
- self.fontColorToolButton.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
+ self.fontColorToolButton = QtWidgets.QToolButton()
+ self.fontColorToolButton.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
self.fontColorToolButton.setMenu(
self.createColorMenu(self.textColorChanged, QtCore.Qt.black))
self.textAction = self.fontColorToolButton.menu().defaultAction()
@@ -646,8 +683,8 @@ class MainWindow(QtGui.QMainWindow):
self.fontColorToolButton.setAutoFillBackground(True)
self.fontColorToolButton.clicked.connect(self.textButtonTriggered)
- self.fillColorToolButton = QtGui.QToolButton()
- self.fillColorToolButton.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
+ self.fillColorToolButton = QtWidgets.QToolButton()
+ self.fillColorToolButton.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
self.fillColorToolButton.setMenu(
self.createColorMenu(self.itemColorChanged, QtCore.Qt.white))
self.fillAction = self.fillColorToolButton.menu().defaultAction()
@@ -656,8 +693,8 @@ class MainWindow(QtGui.QMainWindow):
QtCore.Qt.white))
self.fillColorToolButton.clicked.connect(self.fillButtonTriggered)
- self.lineColorToolButton = QtGui.QToolButton()
- self.lineColorToolButton.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
+ self.lineColorToolButton = QtWidgets.QToolButton()
+ self.lineColorToolButton.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
self.lineColorToolButton.setMenu(
self.createColorMenu(self.lineColorChanged, QtCore.Qt.black))
self.lineAction = self.lineColorToolButton.menu().defaultAction()
@@ -678,21 +715,21 @@ class MainWindow(QtGui.QMainWindow):
self.colorToolBar.addWidget(self.fillColorToolButton)
self.colorToolBar.addWidget(self.lineColorToolButton)
- pointerButton = QtGui.QToolButton()
+ pointerButton = QtWidgets.QToolButton()
pointerButton.setCheckable(True)
pointerButton.setChecked(True)
pointerButton.setIcon(QtGui.QIcon(':/images/pointer.png'))
- linePointerButton = QtGui.QToolButton()
+ linePointerButton = QtWidgets.QToolButton()
linePointerButton.setCheckable(True)
linePointerButton.setIcon(QtGui.QIcon(':/images/linepointer.png'))
- self.pointerTypeGroup = QtGui.QButtonGroup()
+ self.pointerTypeGroup = QtWidgets.QButtonGroup()
self.pointerTypeGroup.addButton(pointerButton, DiagramScene.MoveItem)
self.pointerTypeGroup.addButton(linePointerButton,
DiagramScene.InsertLine)
self.pointerTypeGroup.buttonClicked[int].connect(self.pointerGroupClicked)
- self.sceneScaleCombo = QtGui.QComboBox()
+ self.sceneScaleCombo = QtWidgets.QComboBox()
self.sceneScaleCombo.addItems(["50%", "75%", "100%", "125%", "150%"])
self.sceneScaleCombo.setCurrentIndex(2)
self.sceneScaleCombo.currentIndexChanged[str].connect(self.sceneScaleChanged)
@@ -703,18 +740,18 @@ class MainWindow(QtGui.QMainWindow):
self.pointerToolbar.addWidget(self.sceneScaleCombo)
def createBackgroundCellWidget(self, text, image):
- button = QtGui.QToolButton()
+ button = QtWidgets.QToolButton()
button.setText(text)
button.setIcon(QtGui.QIcon(image))
button.setIconSize(QtCore.QSize(50, 50))
button.setCheckable(True)
self.backgroundButtonGroup.addButton(button)
- layout = QtGui.QGridLayout()
+ layout = QtWidgets.QGridLayout()
layout.addWidget(button, 0, 0, QtCore.Qt.AlignHCenter)
- layout.addWidget(QtGui.QLabel(text), 1, 0, QtCore.Qt.AlignCenter)
+ layout.addWidget(QtWidgets.QLabel(text), 1, 0, QtCore.Qt.AlignCenter)
- widget = QtGui.QWidget()
+ widget = QtWidgets.QWidget()
widget.setLayout(layout)
return widget
@@ -723,17 +760,17 @@ class MainWindow(QtGui.QMainWindow):
item = DiagramItem(diagramType, self.itemMenu)
icon = QtGui.QIcon(item.image())
- button = QtGui.QToolButton()
+ button = QtWidgets.QToolButton()
button.setIcon(icon)
button.setIconSize(QtCore.QSize(50, 50))
button.setCheckable(True)
self.buttonGroup.addButton(button, diagramType)
- layout = QtGui.QGridLayout()
+ layout = QtWidgets.QGridLayout()
layout.addWidget(button, 0, 0, QtCore.Qt.AlignHCenter)
- layout.addWidget(QtGui.QLabel(text), 1, 0, QtCore.Qt.AlignCenter)
+ layout.addWidget(QtWidgets.QLabel(text), 1, 0, QtCore.Qt.AlignCenter)
- widget = QtGui.QWidget()
+ widget = QtWidgets.QWidget()
widget.setLayout(layout)
return widget
@@ -742,9 +779,9 @@ class MainWindow(QtGui.QMainWindow):
colors = [QtCore.Qt.black, QtCore.Qt.white, QtCore.Qt.red, QtCore.Qt.blue, QtCore.Qt.yellow]
names = ["black", "white", "red", "blue", "yellow"]
- colorMenu = QtGui.QMenu(self)
+ colorMenu = QtWidgets.QMenu(self)
for color, name in zip(colors, names):
- action = QtGui.QAction(self.createColorIcon(color), name, self,
+ action = QtWidgets.QAction(self.createColorIcon(color), name, self,
triggered=slot)
action.setData(QtGui.QColor(color))
colorMenu.addAction(action)
@@ -779,7 +816,7 @@ if __name__ == '__main__':
import sys
- app = QtGui.QApplication(sys.argv)
+ app = QtWidgets.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.setGeometry(100, 100, 800, 500)