The QPen is an elementary graphics object. It is used to draw lines, curves(曲线) and outlines of rectangles, ellipses(椭圆), polygons(多边形), or other shapes.
画笔主要是画边缘地区(也就是相当于素描勾勒形状但是不填充)
代码:
# coding='utf-8'
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
import sys
class Gui(QWidget):
def __init__(self):
super(Gui, self).__init__()
self.start()
def start(self):
self.setGeometry(300, 300, 280, 270)
self.setWindowTitle('画笔展示')
self.show()
# 这个slot在主窗体size改变时触发(比如从无到有也算是size改变)
def paintEvent(self, e) -> None:
qp = QPainter()
qp.begin(self)
# 绘制的主体内容在begin和end之间,begin的一个参数是绘制在哪个地方
self.draw_lines(e, qp)
qp.end()
def draw_lines(self, e, qp):
# 我们设置了六种不同风格的QPen对象\
# 绘制了6种不同的直线
# QPen的构造函数:
"""
QPen()
QPen(Qt.PenStyle)
QPen(Union[QBrush, QColor,\
Qt.GlobalColor, QGradient],\
float, style: Qt.PenStyle = Qt.SolidLine,\
cap: Qt.PenCapStyle = Qt.SquareCap,\
join: Qt.PenJoinStyle = Qt.BevelJoin)
QPen(Union[QPen, QColor, Qt.GlobalColor, QGradient])
QPen(Any)
"""
# 画笔的颜色设置成黑色,pix像素设置成2,笔的类型设置成连续的直线
pen = QPen(Qt.black, 2, Qt.SolidLine)
# 设置当前画笔对象为刚刚设置的画笔
qp.setPen(pen)
# 用这个画笔画第一条线,四个参数分别是(x0,y0) --> (x1,y1)\
# 画这样一条直线.
qp.drawLine(20, 40, 250, 40)
# 给画笔设置一种新的风格:虚线(DashLine)
pen.setStyle(Qt.DashLine)
# 改变QPainter实例对象的画笔为刚刚刚刚更新后的画笔(虚线)
qp.setPen(pen)
qp.drawLine(20, 80, 250, 80)
# 给画笔设置一种新的风格:虚点线(DashDotLine)\
# 也就是每个虚线空白后加一个点
pen.setStyle(Qt.DashDotLine)
qp.setPen(pen)
qp.drawLine(20, 120, 250, 120)
# 给画笔设置一种新的风格:点线(DotLine)\
# 也就是全是点组成的线
pen.setStyle(Qt.DotLine)
qp.setPen(pen)
qp.drawLine(20, 160, 250, 160)
# 给画笔设置一种新的风格:虚点点线(DashDotDotLine)\
# 也就是虚线加空白加两个点组成的线
pen.setStyle(Qt.DashDotDotLine)
qp.setPen(pen)
qp.drawLine(20, 200, 250, 200)
# 这是将画笔的线设置成用户自定义的线类型\
# 定义方法用setDashPattern
pen.setStyle(Qt.CustomDashLine)
# There must be an even number(偶数) of numbers.\
# Odd(奇数) numbers define a dash,\(奇数位次)
# even(偶数) numbers space.\(偶数位次)
# The greater the number, the greater the space\
# or the dash. Our pattern is 1px dash, 4px\
# space, 5px dash, 4px space etc.
# 总结就是:1个px的点,4个px的空白,5个px的点,4个px的空白,这样循环
pen.setDashPattern([1, 4, 3, 4])
qp.setPen(pen)
qp.drawLine(20, 240, 250, 240)
app = QApplication(sys.argv)
gui = Gui()
sys.exit(app.exec_())
运行结果:
image.png
网友评论