绘图要在paintEvent()方法中实现。在QPainter对象的begin()与end()方法间编写绘图代码。它会在控件或其他图形设备上进行低级的图形绘制
画笔样式Penstyle
Qt.Nopen 没有线。比如QPainter.drawRect()填充,但没有绘制任何边界线
Qt.SolidLine 一条简单的线
Qt.DashLine 有一些像素分割的线
Qt.DotLine 有一些像素分割的点
Qt.DashDotLine 轮流交替的点和短线
Qt.DashDotDotLine 一条短线,两个点
Qt.MpenStyle 画笔风格的掩码
Qt.CustomDashLine 自定义样式
三种笔端样式:
线条连接方式,一共有三种:
1 import sys 2 from PyQt5.QtCore import Qt 3 from PyQt5.QtGui import QPainter, QPen 4 from PyQt5.QtWidgets import QApplication, QWidget 5 6 7 class Demo(QWidget): 8 def __init__(self): 9 super(Demo, self).__init__() 10 self.resize(600, 600) 11 12 self.pen1 = QPen() # 实例化画笔对象 13 self.pen1.setColor(Qt.green) #设置画笔颜色 14 self.pen2 = QPen(Qt.SolidLine) #实例化画笔对象.参数:画笔样式 15 self.pen2.setWidth(6) #设置画笔粗细 16 #传入整型值,默认为1。如果要传入浮点型的话可使用setWidthF() 17 # self.pen2.setWidthF(3.3) 18 19 self.pen3 = QPen(Qt.DashLine) 20 self.pen4 = QPen(Qt.DotLine) 21 self.pen5 = QPen(Qt.DashDotLine) 22 self.pen6 = QPen(Qt.DashDotDotLine) 23 self.pen7 = QPen(Qt.CustomDashLine) 24 #自定义样式的话,我们之后还需要调用setDashPattern()方法来设置虚线模式。只要传入一个迭代器即可,这里我们传入[6, 2, 18, 2](元素数量为偶数)这个列表,意思是我们想将第一个虚线长度设为6个像素,再设置空白间隔长度为2个像素,之后再画一条长度为18像素的虚线,最后再加个长度为2像素的空白间隔,如此循环 25 self.pen7.setDashPattern([6, 2, 18, 2]) 26 27 self.pen8 = QPen(Qt.SolidLine) 28 self.pen8.setWidth(6) 29 self.pen8.setCapStyle(Qt.RoundCap) #设置笔端样式 30 31 self.pen9 = QPen(Qt.SolidLine) 32 self.pen9.setWidthF(6) 33 self.pen9.setJoinStyle(Qt.MiterJoin) #设置线条连接方式 34 35 def paintEvent(self, QPaintEvent): #绘画事件 36 painter = QPainter(self) # 实例化一个画布 37 painter.setPen(self.pen1) #给画布设置画笔 38 painter.drawLine(100, 10, 500, 10) #画直线。参数:两个点的坐标 39 #绘制一条指定了端点坐标的线,绘制从(x1,y1)到(x2,y2)的直线并且设置当前画笔位置为(x2,y2) 40 # painter.setPen(self.pen2) 41 # painter.drawLine(100, 30, 500, 30) 42 # 43 # painter.setPen(self.pen3) 44 # painter.drawLine(100, 50, 500, 50) 45 # 46 # painter.setPen(self.pen4) 47 # painter.drawLine(100, 70, 500, 70) 48 # 49 # painter.setPen(self.pen5) 50 # painter.drawLine(100, 90, 500, 90) 51 # 52 # painter.setPen(self.pen6) 53 # painter.drawLine(100, 110, 500, 110) 54 # 55 # painter.setPen(self.pen7) 56 # painter.drawLine(100, 130, 500, 130) 57 # 58 # painter.setPen(self.pen8) 59 # painter.drawLine(100, 150, 500, 150) 60 61 painter.setPen(self.pen2) 62 painter.drawRect(100, 50, 400, 100) # 画矩形。 63 #参数1 参数2:矩形左上角坐标 64 #参数3 参数4 宽度 高度 65 66 if __name__ == '__main__': 67 app = QApplication(sys.argv) 68 demo = Demo() 69 demo.show() 70 sys.exit(app.exec_())
setBrush() 设置画笔的风格