def drow(self, pos, state, drawLine): painter = QPainter(self.label.pixmap()) if state: painter.setBrush(QBrush(QColor(255, 0, 0), Qt.SolidPattern)) painter.setPen(QColor(255, 0, 0)) else: brush = QBrush() brush.setTexture(self.label.orginalImage) painter.setBrush(brush) painter.setPen(QColor(Qt.transparent)) painter.pen().setWidth(self.label.brushSize) painter.drawEllipse(pos.x() - self.label.brushSize / 2, pos.y() - self.label.brushSize / 2, self.label.brushSize, self.label.brushSize) if drawLine: painter.drawLine(pos, self.label.lastPos) painter2 = QPainter(self.label.selctedRegionImage) if state: painter2.setBrush(QBrush(QColor(255, 0, 0), Qt.SolidPattern)) painter2.setPen(QColor(255, 0, 0)) else: brush = QBrush() brush.setTexture(QPixmap(self.label.orginalImage.size())) painter2.setBrush(brush) painter2.setPen(QColor(Qt.transparent)) painter2.pen().setWidth(self.label.brushSize) painter2.drawEllipse(pos.x() - self.label.brushSize / 2, pos.y() - self.label.brushSize / 2, self.label.brushSize, self.label.brushSize) if drawLine: painter2.drawLine(pos, self.label.lastPos) self.label.update()
def drawShape(self, event, qp): pen = QPen(Qt.yellow) pen.setWidth(3) # rellenar fondo con patron de imagen brush = QBrush() brush.setTexture(QPixmap('image/small_image.jpg')) # establecer el QBrush qp.setBrush(brush) qp.setPen(pen) qp.drawRoundedRect(QRect(50, 50, 200, 150), 15, 15) # utilizar un patron predefinido brush.setStyle(Qt.DiagCrossPattern) qp.setBrush(brush) qp.drawEllipse(350, 50, 150, 150)
def drawMap(self): dark = QColor(20,20,20) light = QColor(211,211,211) brush = QBrush() pen = QPen() pen.setColor(QColor(0, 0, 0, 75)) # Create graphic objects for map squares for y in range(0,len(self.map)): for x in range(0,len(self.map[y])): shape = QGraphicsRectItem(self.map[y][x].size*x,self.map[y][x].size*y,self.map[y][x].size,self.map[y][x].size) if self.map[y][x].isWall: brush.setTexture(self.grass) else: brush.setTexture(self.gravel) self.map[y][x].shape = shape shape.setPen(pen) shape.setBrush(brush) self.scene.addItem(shape)
def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.setRenderHint(QPainter.TextAntialiasing) pen = QPen() pen.setWidth(2) pen.setColor(Qt.red) painter.setPen(pen) texturePixmap = QPixmap("../image/texture2.jpg") brush = QBrush() brush.setStyle(Qt.TexturePattern) brush.setTexture(texturePixmap) painter.setBrush(brush) W = self.width() H = self.height() rect = QRect(W / 5, H / 5, 3 * W / 5, 3 * H / 5) painter.drawRect(rect)
def __draw02_textureBrush(self): #在窗口上绘图 painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.setRenderHint(QPainter.TextAntialiasing) #设置画笔 pen = QPen() pen.setWidth(3) #线宽 pen.setColor(Qt.red) #划线颜色 ## Qt::NoPen,Qt::SolidLine, Qt::DashLine, Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,Qt::CustomDashLine pen.setStyle(Qt.SolidLine) #线的类型,实线、虚线等 ## Qt::FlatCap, Qt::SquareCap,Qt::RoundCap pen.setCapStyle(Qt.RoundCap) #线端点样式 ## Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoin pen.setJoinStyle(Qt.RoundJoin) #线的连接点样式 painter.setPen(pen) ##设置画刷 texturePixmap = QPixmap("texture.jpg") brush = QBrush() ## brush.setColor(Qt.yellow) #画刷颜色 ## brush.setStyle(Qt.SolidPattern) #填充样式 brush.setStyle(Qt.TexturePattern) #画刷填充样式 brush.setTexture(texturePixmap) #设置材质图片 painter.setBrush(brush) ##绘图 W = self.width() #绘图区宽度 H = self.height() #绘图区高度 rect = QRect(W / 4, H / 4, W / 2, H / 2) painter.drawRect(rect)
def setTiles(self): #background brush = QBrush( ) #QBrush(画刷)是一个基本的图形对象,用于填充如矩形,椭圆形,多边形等形状,QBrush有三种类型,预定义,过渡,和纹理图案 pix = QPixmap(os.getcwd() + "/robotImages/tile.png") brush.setTexture(pix) brush.setStyle(24) self.setBackgroundBrush(brush) #wall:left、right、top、bottom都是QGraphicsRectItem类型 #left left = QGraphicsRectItem() pix = QPixmap(os.getcwd() + "/robotImages/tileVert.png") #获取贴图 left.setRect(QRectF(0, 0, pix.width(), self.height)) #尺寸:宽是图片宽度 ,高度是战场高度 brush.setTexture(pix) #设置贴图函数 brush.setStyle( 24 ) #参数24指平铺格式(参数为枚举类型)详情见 https://doc.qt.io/qt-5/qt.html#BrushStyle-enum left.setBrush(brush) left.name = 'left' self.addItem(left) #right right = QGraphicsRectItem() right.setRect(self.width - pix.width(), 0, pix.width(), self.height) #尺寸:宽是图片的宽度、高是战场的高 right.setBrush(brush) right.name = 'right' self.addItem(right) #top top = QGraphicsRectItem() pix = QPixmap(os.getcwd() + "/robotImages/tileHori.png") top.setRect(QRectF(0, 0, self.width, pix.height())) brush.setTexture(pix) brush.setStyle(24) top.setBrush(brush) top.name = 'top' self.addItem(top) #bottom bottom = QGraphicsRectItem() bottom.setRect(0, self.height - pix.height(), self.width, pix.height()) bottom.setBrush(brush) bottom.name = 'bottom' self.addItem(bottom)
def paintEvent(self, objQPaintEvent): p = QPainter() p.begin(self) pen = QPen(Qt.black, 2, Qt.SolidLine) p.setPen(pen) p.drawLine(20, 15, 150, 15) pen.setStyle(Qt.DashLine) p.setPen(pen) p.drawLine(20, 35, 150, 35) pen.setStyle(Qt.DotLine) p.setPen(pen) p.drawLine(20, 55, 150, 55) pen.setStyle(Qt.DashDotLine) p.setPen(pen) p.drawLine(20, 75, 150, 75) pen.setStyle(Qt.DashDotDotLine) p.setPen(pen) p.drawLine(20, 95, 150, 95) pen.setStyle(Qt.CustomDashLine) pen.setDashPattern([1, 4, 5, 4]) p.setPen(pen) p.drawLine(20, 115, 150, 115) pen.setWidth(1) pen.setStyle(Qt.SolidLine) p.setPen(pen) brush = QBrush(Qt.SolidPattern) p.setBrush(brush) p.drawRect(180, 10, 40, 30) brush = QBrush(Qt.Dense5Pattern) p.setBrush(brush) p.drawRect(240, 10, 40, 30) brush = QBrush(Qt.Dense7Pattern) p.setBrush(brush) p.drawRect(300, 10, 40, 30) brush = QBrush(Qt.green, Qt.HorPattern) p.setBrush(brush) p.drawRect(180, 50, 40, 30) brush = QBrush(Qt.green, Qt.VerPattern) p.setBrush(brush) p.drawRect(240, 50, 40, 30) brush = QBrush(Qt.green, Qt.Dense6Pattern) brush = QBrush(Qt.green, Qt.CrossPattern) p.setBrush(brush) p.drawRect(300, 50, 40, 30) brush = QBrush(Qt.blue, Qt.BDiagPattern) p.setBrush(brush) p.drawRect(180, 90, 40, 30) brush = QBrush(Qt.blue, Qt.FDiagPattern) p.setBrush(brush) p.drawRect(240, 90, 40, 30) brush = QBrush(Qt.blue, Qt.DiagCrossPattern) p.setBrush(brush) p.drawRect(300, 90, 40, 30) g = QLinearGradient(180, 130, 220, 160) g.setColorAt(0, Qt.red) g.setColorAt(1, Qt.blue) brush = QBrush(g) p.setBrush(brush) p.drawRect(180, 130, 40, 30) g = QRadialGradient(260, 145, 20) g.setColorAt(0, Qt.red) g.setColorAt(0.5, Qt.yellow) g.setColorAt(1, Qt.blue) p.setBrush(g) p.drawRect(240, 130, 40, 30) g = QConicalGradient(320, 145, 0) g.setColorAt(0, Qt.red) g.setColorAt(0.4, Qt.yellow) g.setColorAt(0.8, Qt.blue) g.setColorAt(1, Qt.red) p.setBrush(g) p.drawRect(300, 130, 40, 30) brush = QBrush() brush.setTexture(QPixmap(":appres.img/texture.jpg")) p.setBrush(brush) pen.setColor(Qt.transparent) p.setPen(pen) p.drawRect(15, 130, 135, 35) p.end()
def paintEvent(self, e): super().paintEvent(e) # 画鼠标位置处的圆 if 1 in self.parent.painter_tools.values(): painter = QPainter(self) painter.setPen(QPen(self.parent.pencolor, 1, Qt.SolidLine)) rect = QRectF(self.px - self.parent.tool_width // 2, self.py - self.parent.tool_width // 2, self.parent.tool_width, self.parent.tool_width) painter.drawEllipse(rect) painter.end() if self.startpaint: while len(self.parent.eraser_pointlist): # 画橡皮擦 self.pixPainter = QPainter(self.pixmap()) self.pixPainter.setRenderHint(QPainter.Antialiasing) self.pixPainter.setBrush(QColor(0, 0, 0, 0)) self.pixPainter.setPen(Qt.NoPen) self.pixPainter.setCompositionMode( QPainter.CompositionMode_Clear) new_pen_point = self.parent.eraser_pointlist.pop(0) if self.parent.old_pen[0] != -2 and new_pen_point[0] != -2: self.pixPainter.drawEllipse( new_pen_point[0] - self.parent.tool_width / 2, new_pen_point[1] - self.parent.tool_width / 2, self.parent.tool_width, self.parent.tool_width) self.parent.old_pen = new_pen_point self.pixPainter.end() while len(self.parent.pen_pointlist): # 画笔功能 self.pixPainter = QPainter(self.pixmap()) self.pixPainter.setRenderHint(QPainter.Antialiasing) self.pixPainter.setBrush(self.parent.pencolor) self.pixPainter.setPen( QPen(self.parent.pencolor, self.parent.tool_width, Qt.SolidLine)) new_pen_point = self.parent.pen_pointlist.pop(0) if self.parent.old_pen[0] != -2 and new_pen_point[0] != -2: path = QPainterPath( QPoint(self.parent.old_pen[0], self.parent.old_pen[1])) path.quadTo( QPoint( (new_pen_point[0] + self.parent.old_pen[0]) / 2, (new_pen_point[1] + self.parent.old_pen[1]) / 2), QPoint(new_pen_point[0], new_pen_point[1])) self.pixPainter.drawPath(path) self.parent.old_pen = new_pen_point self.pixPainter.end() while len(self.parent.drawpix_pointlist): # 画马赛克/材质贴图功能 self.pixPainter = QPainter(self.pixmap()) self.pixPainter.setRenderHint(QPainter.Antialiasing) brush = QBrush(self.parent.pencolor) brush.setTexture(QPixmap(self.pixpng)) self.pixPainter.setBrush(brush) self.pixPainter.setPen(Qt.NoPen) new_pen_point = self.parent.drawpix_pointlist.pop(0) if self.parent.old_pen[0] != -2 and new_pen_point[0] != -2: self.pixPainter.drawEllipse( new_pen_point[0] - self.parent.tool_width / 2, new_pen_point[1] - self.parent.tool_width / 2, self.parent.tool_width, self.parent.tool_width) self.parent.old_pen = new_pen_point self.pixPainter.end() if self.parent.drawrect_pointlist[0][ 0] != -2 and self.parent.drawrect_pointlist[1][ 0] != -2: # 画方形 self.pixPainter = QPainter(self.pixmap()) self.pixPainter.setRenderHint(QPainter.Antialiasing) temppainter = QPainter(self) temppainter.setPen(QPen(self.parent.pencolor, 3, Qt.SolidLine)) poitlist = self.parent.drawrect_pointlist temppainter.drawRect(min(poitlist[0][0], poitlist[1][0]), min(poitlist[0][1], poitlist[1][1]), abs(poitlist[0][0] - poitlist[1][0]), abs(poitlist[0][1] - poitlist[1][1])) temppainter.end() if self.parent.drawrect_pointlist[2] == 1: self.pixPainter.setPen( QPen(self.parent.pencolor, 3, Qt.SolidLine)) self.pixPainter.drawRect( min(poitlist[0][0], poitlist[1][0]), min(poitlist[0][1], poitlist[1][1]), abs(poitlist[0][0] - poitlist[1][0]), abs(poitlist[0][1] - poitlist[1][1])) self.parent.drawrect_pointlist = [[-2, -2], [-2, -2], 0] self.pixPainter.end() if self.parent.drawcircle_pointlist[0][ 0] != -2 and self.parent.drawcircle_pointlist[1][ 0] != -2: # 画圆 self.pixPainter = QPainter(self.pixmap()) self.pixPainter.setRenderHint(QPainter.Antialiasing) temppainter = QPainter(self) temppainter.setPen(QPen(self.parent.pencolor, 3, Qt.SolidLine)) poitlist = self.parent.drawcircle_pointlist temppainter.drawEllipse(min(poitlist[0][0], poitlist[1][0]), min(poitlist[0][1], poitlist[1][1]), abs(poitlist[0][0] - poitlist[1][0]), abs(poitlist[0][1] - poitlist[1][1])) temppainter.end() if self.parent.drawcircle_pointlist[2] == 1: self.pixPainter.setPen( QPen(self.parent.pencolor, 3, Qt.SolidLine)) self.pixPainter.drawEllipse( min(poitlist[0][0], poitlist[1][0]), min(poitlist[0][1], poitlist[1][1]), abs(poitlist[0][0] - poitlist[1][0]), abs(poitlist[0][1] - poitlist[1][1])) self.parent.drawcircle_pointlist = [[-2, -2], [-2, -2], 0] self.pixPainter.end() if self.parent.drawarrow_pointlist[0][ 0] != -2 and self.parent.drawarrow_pointlist[1][ 0] != -2: # 画箭头 self.pixPainter = QPainter(self.pixmap()) self.pixPainter.setRenderHint(QPainter.Antialiasing) temppainter = QPainter(self) poitlist = self.parent.drawarrow_pointlist temppainter.translate(poitlist[0][0], poitlist[0][1]) degree = math.degrees( math.atan2(poitlist[1][1] - poitlist[0][1], poitlist[1][0] - poitlist[0][0])) temppainter.rotate(degree) dx = math.sqrt((poitlist[1][1] - poitlist[0][1])**2 + (poitlist[1][0] - poitlist[0][0])**2) dy = 30 temppainter.drawPixmap(0, -dy / 2, QPixmap(':/arrow.png').scaled(dx, dy)) temppainter.end() if self.parent.drawarrow_pointlist[2] == 1: self.pixPainter.translate(poitlist[0][0], poitlist[0][1]) degree = math.degrees( math.atan2(poitlist[1][1] - poitlist[0][1], poitlist[1][0] - poitlist[0][0])) self.pixPainter.rotate(degree) dx = math.sqrt((poitlist[1][1] - poitlist[0][1])**2 + (poitlist[1][0] - poitlist[0][0])**2) dy = 30 self.pixPainter.drawPixmap( 0, -dy / 2, QPixmap(':/arrow.png').scaled(dx, dy)) self.parent.drawarrow_pointlist = [[-2, -2], [-2, -2], 0] # self.parent.drawarrow_pointlist[0] = [-2, -2] self.pixPainter.end() if len(self.parent.drawtext_pointlist ) > 1 or self.parent.text_box.paint: # 画文字 self.pixPainter = QPainter(self.pixmap()) self.pixPainter.setRenderHint(QPainter.Antialiasing) self.parent.text_box.paint = False # print(self.parent.drawtext_pointlist) text = self.parent.text_box.toPlainText() self.parent.text_box.clear() pos = self.parent.drawtext_pointlist.pop(0) if text: self.pixPainter.setFont( QFont('微软雅黑', self.parent.tool_width)) self.pixPainter.setPen( QPen(self.parent.pencolor, 3, Qt.SolidLine)) self.pixPainter.drawText( pos[0] + self.parent.text_box.document.size().height() / 8, pos[1] + self.parent.text_box.document.size().height() * 32 / 41, text) self.pixPainter.end() else: self.startpaint = 1