import exportDialogTemplate from pyqtgraph.Qt import QtCore, QtGui import pyqtgraph as pg import pyqtgraph.exporters as exporters class ExportDialog(QtGui.QWidget): def __init__(self, scene): QtGui.QWidget.__init__(self) self.setVisible(False) self.setWindowTitle("Export") self.shown = False self.currentExporter = None self.scene = scene self.selectBox = QtGui.QGraphicsRectItem() self.selectBox.setPen(pg.mkPen('y', width=3, style=QtCore.Qt.DashLine)) self.selectBox.hide() self.scene.addItem(self.selectBox) self.ui = exportDialogTemplate.Ui_Form() self.ui.setupUi(self) self.ui.closeBtn.clicked.connect(self.close) self.ui.exportBtn.clicked.connect(self.exportClicked) self.ui.itemTree.currentItemChanged.connect(self.exportItemChanged) self.ui.formatList.currentItemChanged.connect(self.exportFormatChanged) def show(self, item=None): if item is not None: while not isinstance(item, pg.ViewBox) and not isinstance(item, pg.PlotItem) and item is not None: item = item.parentItem() self.updateItemList(select=item) self.setVisible(True) self.activateWindow() self.raise_() self.selectBox.setVisible(True) if not self.shown: self.shown = True vcenter = self.scene.getViewWidget().geometry().center() self.setGeometry(vcenter.x()-self.width()/2, vcenter.y()-self.height()/2, self.width(), self.height()) def updateItemList(self, select=None): self.ui.itemTree.clear() si = QtGui.QTreeWidgetItem(["Entire Scene"]) si.gitem = self.scene self.ui.itemTree.addTopLevelItem(si) self.ui.itemTree.setCurrentItem(si) si.setExpanded(True) for child in self.scene.items(): if child.parentItem() is None: self.updateItemTree(child, si, select=select) def updateItemTree(self, item, treeItem, select=None): si = None if isinstance(item, pg.ViewBox): si = QtGui.QTreeWidgetItem(['ViewBox']) elif isinstance(item, pg.PlotItem): si = QtGui.QTreeWidgetItem(['Plot']) if si is not None: si.gitem = item treeItem.addChild(si) treeItem = si if si.gitem is select: self.ui.itemTree.setCurrentItem(si) for ch in item.childItems(): self.updateItemTree(ch, treeItem, select=select) def exportItemChanged(self, item, prev): if item is None: return if item.gitem is self.scene: newBounds = self.scene.views()[0].viewRect() else: newBounds = item.gitem.sceneBoundingRect() self.selectBox.setRect(newBounds) self.selectBox.show() self.updateFormatList() def updateFormatList(self): current = self.ui.formatList.currentItem() if current is not None: current = str(current.text()) self.ui.formatList.clear() self.exporterClasses = {} gotCurrent = False for exp in exporters.listExporters(): self.ui.formatList.addItem(exp.Name) self.exporterClasses[exp.Name] = exp if exp.Name == current: self.ui.formatList.setCurrentRow(self.ui.formatList.count()-1) gotCurrent = True if not gotCurrent: self.ui.formatList.setCurrentRow(0) def exportFormatChanged(self, item, prev): if item is None: self.currentExporter = None self.ui.paramTree.clear() return expClass = self.exporterClasses[str(item.text())] exp = expClass(item=self.ui.itemTree.currentItem().gitem) params = exp.parameters() if params is None: self.ui.paramTree.clear() else: self.ui.paramTree.setParameters(params) self.currentExporter = exp def exportClicked(self): self.selectBox.hide() self.currentExporter.export() def close(self): self.selectBox.setVisible(False) self.setVisible(False)