def _updatePrinter(self): """Resize :attr:`page`, :attr:`scene` and :attr:`view` to :attr:`printer` width and height.""" printer = self.printer assert printer is not None, \ "_updatePrinter should not be called unless a printer is defined" if self.scene is None: self.scene = qt.QGraphicsScene() self.scene.setBackgroundBrush(qt.QColor(qt.Qt.lightGray)) self.scene.setSceneRect(qt.QRectF(0, 0, printer.width(), printer.height())) if self.page is None: self.page = qt.QGraphicsRectItem(0, 0, printer.width(), printer.height()) self.page.setBrush(qt.QColor(qt.Qt.white)) self.scene.addItem(self.page) self.scene.setSceneRect(qt.QRectF(0, 0, printer.width(), printer.height())) self.page.setPos(qt.QPointF(0.0, 0.0)) self.page.setRect(qt.QRectF(0, 0, printer.width(), printer.height())) if self.view is None: self.view = qt.QGraphicsView(self.scene) self.mainLayout.addWidget(self.view) self._buildStatusBar() # self.view.scale(1./self._viewScale, 1./self._viewScale) self.view.fitInView(self.page.rect(), qt.Qt.KeepAspectRatio) self._viewScale = 1.00 self._updateTargetLabel()
def _print(self): """Do the printing, hide the print preview dialog, set :attr:`_toBeCleared` flag to True to trigger clearing the next time the dialog is shown. If the printer is not setup, do it first.""" printer = self.printer painter = qt.QPainter() if not painter.begin(printer) or printer is None: _logger.error("Cannot initialize printer") return try: self.scene.render(painter, qt.QRectF(0, 0, printer.width(), printer.height()), qt.QRectF(self.page.rect().x(), self.page.rect().y(), self.page.rect().width(), self.page.rect().height()), qt.Qt.KeepAspectRatio) painter.end() self.hide() self.accept() self._toBeCleared = True except: # FIXME painter.end() qt.QMessageBox.critical(self, "ERROR", 'Printing problem:\n %s' % sys.exc_info()[1]) _logger.error('printing problem:\n %s' % sys.exc_info()[1]) return