def testSimple(): import sys import os filename = sys.argv[1] a = qt.QApplication(sys.argv) w = qt.QWidget() l = qt.QVBoxLayout(w) button = qt.QPushButton(w) button.setText("Print") scene = qt.QGraphicsScene() pixmapItem = qt.QGraphicsPixmapItem( qt.QPixmap.fromImage(qt.QImage(filename))) pixmapItem.setFlag(pixmapItem.ItemIsMovable, True) printer = qt.QPrinter(qt.QPrinter.HighResolution) printer.setFullPage(True) printer.setOutputFileName(os.path.splitext(filename)[0] + ".ps") page = qt.QGraphicsRectItem(0, 0, printer.width(), printer.height()) scene.setSceneRect(qt.QRectF(0, 0, printer.width(), printer.height())) scene.addItem(page) scene.addItem(pixmapItem) view = qt.QGraphicsView(scene) view.fitInView(page.rect(), qt.Qt.KeepAspectRatio) #view.setSceneRect( view.scale(2, 2) #page.scale(0.05, 0.05) def printFile(): painter = qt.QPainter(printer) scene.render( painter, qt.QRectF(0, 0, printer.width(), printer.height()), qt.QRectF(page.rect().x(), page.rect().y(), page.rect().width(), page.rect().height()), qt.Qt.KeepAspectRatio) painter.end() l.addWidget(button) l.addWidget(view) w.resize(300, 600) w.show() w.connect(button, qt.SIGNAL('clicked()'), printFile) a.exec_()
def mousePressEvent(self, event): if DEBUG: print("ResizeRect mousePress") if self._newRect is not None: self._newRect = None self.__point0 = self.pos() parent = self.parentItem() scene = self.scene() rect = parent.rect() self._x = rect.x() self._y = rect.x() self._w = rect.width() self._h = rect.height() self._ratio = self._w / self._h self._newRect = qt.QGraphicsRectItem(parent, scene) self._newRect.setRect(qt.QRectF(self._x, self._y, self._w, self._h)) qt.QGraphicsRectItem.mousePressEvent(self, event)
def __init__(self, parent = None, printer = None, name = "PyMcaPrintPreview", \ modal = 0, fl = 0): qt.QDialog.__init__(self, parent) self.setWindowTitle(name) self.setModal(modal) self.resize(400, 500) self.printDialog = None if printer is None: printer = qt.QPrinter(qt.QPrinter.HighResolution) printer.setPageSize(qt.QPrinter.A4) printerName = "%s" % printer.printerName() if printerName in ['id24b2u']: #id24 printer very slow in color mode printer.setColorMode(qt.QPrinter.GrayScale) printer.setFullPage(True) if (printer.width() <= 0) or (printer.height() <= 0): if QTVERSION < '4.2.0': #this is impossible (no QGraphicsView) filename = "PyMCA_print.pdf" else: filename = "PyMCA_print.ps" if sys.platform == 'win32': home = os.getenv('USERPROFILE') try: l = len(home) directory = os.path.join(home, "My Documents") except: home = '\\' directory = '\\' if os.path.isdir('%s' % directory): directory = os.path.join(directory, "PyMca") else: directory = os.path.join(home, "PyMca") if not os.path.exists('%s' % directory): os.mkdir('%s' % directory) finalfile = os.path.join(directory, filename) else: home = os.getenv('HOME') directory = os.path.join(home, "PyMca") if not os.path.exists('%s' % directory): os.mkdir('%s' % directory) finalfile = os.path.join(directory, filename) printer.setOutputFileName(finalfile) printer.setColorMode(qt.QPrinter.Color) if (printer.width() <= 0) or (printer.height() <= 0): self.message = qt.QMessageBox(self) self.message.setIcon(qt.QMessageBox.Critical) self.message.setText( "Unknown library error \non printer initialization") self.message.setWindowTitle("Library Error") self.message.setModal(0) self.badNews = True self.printer = None return else: self.badNews = False self.printer = printer self.mainLayout = qt.QVBoxLayout(self) self.mainLayout.setMargin(0) self.mainLayout.setSpacing(0) self._buildToolbar() self.scene = qt.QGraphicsScene() self.scene.setBackgroundBrush(qt.QColor(qt.Qt.lightGray)) self.page = qt.QGraphicsRectItem(0, 0, printer.width(), printer.height()) self.page.setBrush(qt.QColor(qt.Qt.white)) self.scene.setSceneRect( qt.QRectF(0, 0, printer.width(), printer.height())) self.scene.addItem(self.page) self.view = qt.QGraphicsView(self.scene) self.mainLayout.addWidget(self.view) self._buildStatusBar() self.view.fitInView(self.page.rect(), qt.Qt.KeepAspectRatio) self._viewScale = 1.00
def addPixmap(self, pixmap, title=None, comment=None, commentposition=None): """ add a pixmap to the print preview scene """ if title is None: title = ' ' title += ' ' if comment is None: comment = ' ' comment += ' ' if commentposition is None: commentposition = "CENTER" if self.badNews: self.message.exec_() return rectItem = qt.QGraphicsRectItem(self.page, self.scene) scale = float(0.5 * self.scene.width() / pixmap.width()) rectItem.setRect(qt.QRectF(1, 1, pixmap.width(), pixmap.height())) pen = rectItem.pen() color = qt.QColor(qt.Qt.red) color.setAlpha(1) pen.setColor(color) rectItem.setPen(pen) rectItem.setZValue(1) rectItem.setFlag(qt.QGraphicsItem.ItemIsSelectable, True) rectItem.setFlag(qt.QGraphicsItem.ItemIsMovable, True) rectItem.setFlag(qt.QGraphicsItem.ItemIsFocusable, False) #I add the resize tool rectItemResizeRect = GraphicsResizeRectItem(rectItem, self.scene) rectItemResizeRect.setZValue(2) #I add a pixmap item pixmapItem = qt.QGraphicsPixmapItem(rectItem, self.scene) pixmapItem.setPixmap(pixmap) #pixmapItem.moveBy(0, 0) pixmapItem.setZValue(0) #I add the title textItem = qt.QGraphicsTextItem(title, rectItem, self.scene) textItem.setTextInteractionFlags(qt.Qt.TextEditorInteraction) offset = 0.5 * textItem.boundingRect().width() textItem.moveBy(0.5 * pixmap.width() - offset, -20) textItem.setZValue(2) #I add the comment commentItem = qt.QGraphicsTextItem(comment, rectItem, self.scene) commentItem.setTextInteractionFlags(qt.Qt.TextEditorInteraction) offset = 0.5 * commentItem.boundingRect().width() if commentposition.upper() == "LEFT": x = 1 else: x = 0.5 * pixmap.width() - offset commentItem.moveBy(x, pixmap.height() + 20) commentItem.setZValue(2) #I should adjust text size here #textItem.scale(2,2) #commentItem.scale(2,2) rectItem.scale(scale, scale) rectItem.moveBy(20, 40)