def paintEvent(self, event): painter = QPainter() painter.begin(self) if not self.showRegionMap: painter.drawPixmap(0, 0, self.scaledOwnershipMap) rect = self.imageRect() if self.isEnabled(): if self.showRegionMap: painter.drawPixmap(0, 0, self.scaledRegionMap) else: if self.currentTerritory: painter.drawPixmap(0, 0, self.coloredMask(self.currentTerritory, QColor(*self.game.clientPlayer.color))) #draw active animations for a in self.animations: painter.save() a.paint(painter) painter.restore() painter.drawPixmap(0, 0, self.scaledTroopCountMap) else: painter.fillRect(rect, QColor(0, 0, 0, 200)) painter.drawText(rect, Qt.AlignCenter, "Waiting for the game to start.") #remaining troops if self.game.yourTurn() and self.game.remainingTroops: troopText = "Remaining troops: %d" % self.game.remainingTroops troopRect = QRect(0, 0, painter.fontMetrics().width(troopText) + 8, painter.fontMetrics().height() + 8) troopRect.moveBottomLeft(rect.bottomLeft()) painter.setPen(Qt.white) painter.setBrush(QColor(0, 0, 0, 200)) painter.drawRect(troopRect) painter.drawText(troopRect, Qt.AlignCenter, troopText) painter.end()
def printFile(self): # Needs some work... printDialog = QPrintDialog(self.printer, py_de) if printDialog.exec_() == QDialog.Accepted: margin = 10 pageNum = 1 yPos = 0 printJob = QPainter() printJob.begin(self.printer) printJob.setFont(self.font) fm = printJob.fontMetrics() for i in range(self.textEdit.lines()): if margin + yPos > self.printer.height() - margin: pageNum += 1 self.printer.newPage() yPos = 0 printJob.drawText(margin, # X margin + yPos, # Y self.printer.width(), # Width self.printer.height(),# Height QtCore.Qt.AlignTop, # Alignment self.textEdit.text(i - 1)# The text to print ) yPos += fm.lineSpacing() printJob.end
def paintEvent(self, evt): QLabel.paintEvent(self, evt) p = QPainter(self) p.setFont(self.font()) x = self._movieWidth + 6 y = (self.height() + p.fontMetrics().xHeight()) / 2 p.drawText(x, y, self._text) p.end()
def sliceImg(width, height, axisLabels, perpAxisLabel, perpAxisValue): print perpAxisLabel, perpAxisValue img = QImage(width, height, QImage.Format_ARGB32) img.fill(0) p = QPainter(img) p.setPen(QColor(255, 255, 255)) p.setBrush(QBrush(QColor(255, 255, 255))) def arrow(p, From, To, label): p.drawLine(From, To) p.drawText(To, label) offset = 10 arrow(p, QPoint(offset, offset), QPoint(offset, height - offset), axisLabels[1]) arrow(p, QPoint(offset, offset), QPoint(width - offset, offset), axisLabels[0]) p.drawText(2 * offset, 2 * offset, "%s=%d" % (perpAxisLabel, perpAxisValue)) fm = p.fontMetrics() size = fm.size(Qt.TextSingleLine, "updown") p.drawText(numpy.random.randint(offset, width - offset - size.width()), numpy.random.randint(offset, height - offset - size.height()), "updown") dots = [] numPixels = 0 while numPixels < 30: r = numpy.random.randint(1, 255) rx, ry = numpy.random.randint(offset, width - offset), numpy.random.randint( offset, height - offset) if img.pixel(rx, ry) != 0: continue p.setPen(QPen(QColor(r, r, r))) p.drawPoint(rx, ry) dots.append(((rx, ry), r)) numPixels += 1 p.end() img.save('test.png') a = qimage2ndarray.rgb_view(img) a = a[:, :, 0].squeeze().swapaxes(0, 1) for (rx, ry), r in dots: assert QColor.fromRgba(img.pixel(rx, ry)).red( ) == r, "QColor.fromRgba(img.pixel(rx,ry)).red() == %d != %d" % ( QColor.fromRgba(img.pixel(rx, ry)).red(), r) assert (a[rx, ry] == r), "a[%d,%d] == %d != %d)" % (rx, ry, a[rx, ry], r) return (a, dots)
def sliceImg(width, height, axisLabels, perpAxisLabel, perpAxisValue): print perpAxisLabel, perpAxisValue img = QImage(width, height, QImage.Format_ARGB32) img.fill(0) p = QPainter(img) p.setPen(QColor(255, 255, 255)) p.setBrush(QBrush(QColor(255, 255, 255))) def arrow(p, From, To, label): p.drawLine(From, To) p.drawText(To, label) offset = 10 arrow(p, QPoint(offset, offset), QPoint(offset, height - offset), axisLabels[1]) arrow(p, QPoint(offset, offset), QPoint(width - offset, offset), axisLabels[0]) p.drawText(2 * offset, 2 * offset, "%s=%d" % (perpAxisLabel, perpAxisValue)) fm = p.fontMetrics() size = fm.size(Qt.TextSingleLine, "updown") p.drawText( numpy.random.randint(offset, width - offset - size.width()), numpy.random.randint(offset, height - offset - size.height()), "updown", ) dots = [] numPixels = 0 while numPixels < 30: r = numpy.random.randint(1, 255) rx, ry = numpy.random.randint(offset, width - offset), numpy.random.randint(offset, height - offset) if img.pixel(rx, ry) != 0: continue p.setPen(QPen(QColor(r, r, r))) p.drawPoint(rx, ry) dots.append(((rx, ry), r)) numPixels += 1 p.end() img.save("test.png") a = qimage2ndarray.rgb_view(img) a = a[:, :, 0].squeeze().swapaxes(0, 1) for (rx, ry), r in dots: assert QColor.fromRgba(img.pixel(rx, ry)).red() == r, "QColor.fromRgba(img.pixel(rx,ry)).red() == %d != %d" % ( QColor.fromRgba(img.pixel(rx, ry)).red(), r, ) assert a[rx, ry] == r, "a[%d,%d] == %d != %d)" % (rx, ry, a[rx, ry], r) return (a, dots)
def createPixmap(width=128, height=128, text=None): """ This definition create a default `QPixmap <http://doc.qt.nokia.com/qpixmap.html>`_ instance. :param width: Pixmap width. ( Integer ) :param height: Pixmap height. ( Integer ) :param text: Pximap text. ( String ) :return: QPixmap. ( QPixmap ) """ loadingPixmap = QPixmap(width, height) loadingPixmap.fill(QColor(96, 96, 96)) painter = QPainter(loadingPixmap) if text: painter.setPen(QPen(QColor(192, 192, 192))) pointX = painter.fontMetrics().width(text) / 2 pointY = width / 2 painter.drawText(pointX, pointY, text) return loadingPixmap
def createPixmap(width=128, height=128, text=None): """ Create a default `QPixmap <http://doc.qt.nokia.com/qpixmap.html>`_ instance. :param width: Pixmap width. :type width: int :param height: Pixmap height. :type height: int :param text: Pximap text. :type text: unicode :return: QPixmap. :rtype: QPixmap """ loadingPixmap = QPixmap(width, height) loadingPixmap.fill(QColor(96, 96, 96)) painter = QPainter(loadingPixmap) if text: painter.setPen(QPen(QColor(192, 192, 192))) pointX = painter.fontMetrics().width(text) / 2 pointY = width / 2 painter.drawText(pointX, pointY, text) return loadingPixmap
def paintEvent(self, event): QWidget.paintEvent(self, event) p = QPainter(self) p.setFont(self.font) if self.pixmap: p.drawPixmap(QPoint(0,0), self.pixmap) r = QRect(self.rect().topLeft() + QPoint(0, 180), QSize(self.rect().size().width(), p.fontMetrics().height())) p.fillRect(r, self.palette().midlight()) if self.progress: pr = QRect(r) pr.setWidth( (r.width() * self.progress) / 100 ) p.fillRect(pr, self.palette().dark()) p.setBrush(Qt.NoBrush) p.setPen(QPen(self.palette().text(), 1)) p.drawText(QRectF(r), self.title, QTextOption(Qt.AlignHCenter)) p.setPen(QPen(self.palette().shadow(), 1)) p.drawRect(self.rect().adjusted(0,0,-1,-1))
def loadImages(self): self.game.board.image = QImage(self.game.board.image) names = self.game.board.territoryNames() progress = QProgressDialog("Loading Board", "", 0, len(names)) progress.setCancelButton(None) progress.setMinimumDuration(0) for (i, name) in enumerate(names): progress.setValue(i) t = self.game.board.getTerritory(name) t.image = QImage(t.image) #generate region map regionOverlay = QImage(self.imageSize(), QImage.Format_ARGB32_Premultiplied) regionOverlay.fill(0) painter = QPainter() painter.begin(regionOverlay) labels = [] for r in self.game.board.regions: regionMask = QImage(self.imageSize(), QImage.Format_ARGB32_Premultiplied) regionMask.fill(0) p = QPainter() p.begin(regionMask) center = QPoint(0, 0) for t in r.territories: p.drawImage(0, 0, t.image) center += QPoint(*t.center) center /= len(r.territories) p.end() regionImage = QImage(self.imageSize(), QImage.Format_ARGB32_Premultiplied) regionImage.fill(0) p.begin(regionImage) p.setCompositionMode(QPainter.CompositionMode_Source) color = [randint(0, 255) for i in range(3)] + [200] p.fillRect(regionImage.rect(), QColor(*color)) p.setCompositionMode(QPainter.CompositionMode_DestinationIn) p.drawImage(0, 0, regionMask) p.end() painter.drawImage(0, 0, regionImage) text = "%s: %d" % (r.name, r.bonus) labels.append((center, text)) for l in labels: (center, text) = l height = painter.fontMetrics().height() + 8 width = painter.fontMetrics().width(text) + 8 painter.setPen(Qt.white) painter.setBrush(QColor(0, 0, 0, 200)) textRect = QRect(0, 0, width, height) textRect.moveCenter(center) painter.drawRect(textRect) painter.drawText(textRect, Qt.AlignCenter, text) painter.end() regionMap = self.game.board.image.copy() painter.begin(regionMap) painter.drawImage(0, 0, regionOverlay) painter.end() self.regionMap = QPixmap.fromImage(regionMap) self.scaledRegionMap = self.regionMap self.ownershipMap = QPixmap.fromImage(self.game.board.image) self.scaledOwnershipMap = self.ownershipMap troopCountMap = QImage(self.game.board.image.size(), QImage.Format_ARGB32_Premultiplied) troopCountMap.fill(0) self.troopCountMap = QPixmap.fromImage(troopCountMap) self.scaledTroopCountMap = self.troopCountMap
def paintEvent(self, e): """ """ PKWidget.paintEvent(self, e) painter = QPainter(self) orig_pen = QPen(painter.pen()) orig_brush = QBrush(painter.brush()) orig_font = QFont(painter.font()) metrics = painter.fontMetrics() f_height = metrics.ascent() text_flags = Qt.AlignHCenter | Qt.AlignVCenter region = e.region() for item in self._shown: font_y = item.y + item.height / 2 + f_height / 2 item_rect = QRect(0, item.y, self.width(), item.height) if not region.contains(item_rect): continue painter.setFont(orig_font) # background pen = item.color().dark(110) pen.setAlpha(100) painter.setBrush(QBrush(item.color())) painter.setPen(QPen(pen)) w = self.width() * (item.progress * .01) rect = QRect(0, item.y, w, item.height) painter.drawRect(rect) # queue pos pen = pen.dark(140) pen.setAlpha(255) painter.setPen(QPen(pen)) queue_rect = QRect(self.padding, item.y + self.padding, item.height - self.padding * 2, item.height - self.padding * 2) painter.drawRoundRect(queue_rect, 35, 35) # num if not item.num is None: painter.setPen(orig_pen) painter.setBrush(orig_brush) painter.drawText(queue_rect, text_flags, str(item.num)) # text painter.setPen(orig_pen) painter.setBrush(orig_brush) font = QFont('Utopia, Italic', 14, -1, True) painter.setFont(font) rect = QRect(item_rect) rect.setX(item.height + self.padding * 2) rect.setWidth(rect.width() - rect.x()) painter.drawText(rect, Qt.AlignVCenter | Qt.AlignLeft, item.text) # state if item.state: font = QFont('7th Service Expanded Italic, Italic') font.setPointSize(18) pen = QColor(orig_pen.color()) pen.setAlpha(50) painter.setPen(QPen(pen)) painter.setFont(font) x = item.x y = item.y w = self.width() h = item.height rect = QRect(x, y, w, h) flags = Qt.AlignVCenter | Qt.AlignRight painter.drawText(rect, flags, item.state+' ')