从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap

简介: 从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap

QPainter控件


QPainter控件的作用


QPainter 类在 QWidget(控件)上执行绘图操作,它是一个绘制工具,为大部分图形界面提供了高度优化的函数,使QPainter类可以绘制从简单的直线到复杂的饼图等。


绘制操作在 **QWidget.paintEvent()**函数中完成。绘制方法必须放在 QtGui.QPainter对象的begin()和 end()之间。


QPainter控件常用方法

2490fd36547a42caa4eb43aed8061378.pngf943f007f25b49559a5f957157370f17.png

QPainter代码示例:1、在窗口中绘制文字


# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication  ,QWidget 
from PyQt5.QtGui import QPainter ,QColor ,QFont
from PyQt5.QtCore import Qt 
class Drawing(QWidget):
  def __init__(self,parent=None):
    super(Drawing,self).__init__(parent)
    self.setWindowTitle("在窗体中绘画出文字例子") 
    self.resize(300, 200)        
    self.text = '欢迎学习 PyQt5'
  def paintEvent(self,event):
    painter = QPainter(self) 
    # 开始绘制       
    painter.begin(self)
        # 自定义的绘画方法
    self.drawText(event, painter)
    # 技术绘制
    painter.end()
  def drawText(self, event, qp):
        # 设置笔的颜色
    qp.setPen( QColor(168, 34, 3) )
        # 设置字体
    qp.setFont( QFont('SimSun', 20))
        # 画出文本
    qp.drawText(event.rect(), Qt.AlignCenter, self.text)
if __name__ == "__main__":  
  app = QApplication(sys.argv) 
  demo = Drawing()
  demo.show()
  sys.exit(app.exec_())

代码运行结果:

c761ff4d38394c668e7b1663f4aed544.png

QPainter代码示例:2、绘制点


# -*- coding: utf-8 -*-
import sys, math
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt 
class Drawing(QWidget):
  def __init__(self, parent=None):
    super(Drawing, self).__init__(parent)
    self.resize(300, 200)  
    self.setWindowTitle("在窗体中画点")         
  def paintEvent(self, event):
    qp = QPainter()
    qp.begin(self)
    # 自定义画点方法
    self.drawPoints(qp)
    qp.end()
  def drawPoints(self,  qp):
    # 设置画笔颜色为红色
    qp.setPen( Qt.red)
    # 获取窗口的大小
    size = self.size()
    for i in range(1000):
      # [-100, 100]两个周期的正弦函数图像
      x = 100 *(-1+2.0*i/1000)+ size.width()/2.0
      y = -50 * math.sin((x - size.width()/2.0)*math.pi/50) + size.height()/2.0
      qp.drawPoint(x, y)
if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo  = Drawing()
  demo.show()
  sys.exit(app.exec_())


代码运行结果:


7da5c2a2c6f0451c9cb6d141629c6150.png


QPen控件


QPen控件的作用


QPen(钢笔)是一个基本的图形对象,用于绘制直线、曲线或者给轮廓画出矩形、椭圆形、多边形及其他形状等。


可以设置钢笔的风格,钢笔的风格如下:

85942222e119412ba316007b9cb27f92.png


QPen代码示例


# -*- coding: utf-8 -*-
import sys 
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt 
class Drawing(QWidget):
  def __init__(self):
    super().__init__()
    self.initUI()
  def initUI(self):   
    self.setGeometry(300, 300, 280, 270)
    self.setWindowTitle('钢笔样式例子')        
  def paintEvent(self, e): 
    qp = QPainter()
    qp.begin(self)
    self.drawLines(qp)
    qp.end()
  def drawLines(self, qp):
    pen = QPen(Qt.black, 2, Qt.SolidLine)
    qp.setPen(pen)
    # 起始点坐标:20,80;结束点坐标:250,80
    qp.drawLine(20, 40, 250, 40)
    pen.setStyle(Qt.DashLine)
    qp.setPen(pen)
    qp.drawLine(20, 80, 250, 80)
    pen.setStyle(Qt.DashDotLine)
    qp.setPen(pen)
    qp.drawLine(20, 120, 250, 120)
    pen.setStyle(Qt.DotLine)
    qp.setPen(pen)
    qp.drawLine(20, 160, 250, 160)
    pen.setStyle(Qt.DashDotDotLine)
    qp.setPen(pen)
    qp.drawLine(20, 200, 250, 200)
    pen.setStyle(Qt.CustomDashLine)
    # 自定义线类型:[1,4,5,4]代表的意义是:1像素宽度的横线,4像素宽度的空余距离,5像素宽度的横线,4像素宽度的空余距离。
    pen.setDashPattern([1, 4, 5, 4])
    qp.setPen(pen)
    qp.drawLine(20, 240, 250, 240)
if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo = Drawing()
  demo.show()
  sys.exit(app.exec_())


代码运行结果:


1fa815fae2f94aa99399e4b13c205e63.png


QBrush控件


QBrush控件作用


QBrush(画刷)是一个基本的图形对象,用于填充如矩形、椭圆形或多边形等形状。QBrush有三种类型:预定义、过渡和纹理图案。


QBrush代码示例


# -*- coding: utf-8 -*-
 import sys 
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt 
class Drawing(QWidget): 
  def __init__(self):
    super().__init__()  
    self.initUI()
  def initUI(self):   
    self.setGeometry(300, 300, 365, 280)
    self.setWindowTitle('画刷例子')        
    self.show()
  def paintEvent(self, e): 
    qp = QPainter()
    qp.begin(self)
    self.drawLines(qp)
    qp.end()
  def drawLines(self, qp): 
    brush = QBrush(Qt.SolidPattern)
    qp.setBrush(brush)
    # 矩形的起点:10,15; 矩形的长宽:90,60
    qp.drawRect(10, 15, 90, 60)
    brush = QBrush(Qt.Dense1Pattern)
    qp.setBrush(brush)
    qp.drawRect(130, 15, 90, 60)
    brush = QBrush(Qt.Dense2Pattern)
    qp.setBrush(brush)
    qp.drawRect(250, 15, 90, 60)
    brush = QBrush(Qt.Dense3Pattern)
    qp.setBrush(brush)
    qp.drawRect(10, 105, 90, 60)
    brush = QBrush(Qt.DiagCrossPattern)
    qp.setBrush(brush)
    qp.drawRect(10, 105, 90, 60)
    brush = QBrush(Qt.Dense5Pattern)
    qp.setBrush(brush)
    qp.drawRect(130, 105, 90, 60)
    brush = QBrush(Qt.Dense6Pattern)
    qp.setBrush(brush)
    qp.drawRect(250, 105, 90, 60)
    brush = QBrush(Qt.HorPattern)
    qp.setBrush(brush)
    qp.drawRect(10, 195, 90, 60)
    brush = QBrush(Qt.VerPattern)
    qp.setBrush(brush)
    qp.drawRect(130, 195, 90, 60)
    brush = QBrush(Qt.BDiagPattern)
    qp.setBrush(brush)
    qp.drawRect(250, 195, 90, 60)
if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo = Drawing()
  demo.show()
  sys.exit(app.exec_())


代码运行结果:


c1cb8bd2666c448eac1edcc6acd5bbac.png


QPixMap控件


QPixMap控件作用


QPixmap类用于绘图设备的图像显示,它可以作为一个 QPaintDevice对象,也可以加载到一个控件中,通常是标签或按钮,用于在标签或按钮上显示图像。


QPixmap可以读取的图像文件类型有 BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、 XBM、 XPM 等。


QPixMap常用方法

eea2f5b9111b4ac9a8bd8b0e9ff23be0.png

QPixMap代码示例


将图片显示在QLabel空间上


# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
if __name__ == '__main__':
  app = QApplication(sys.argv)
  win = QWidget()
  lab1 = QLabel()
  lab1.setPixmap(QPixmap("./images/python.jpg"))
  vbox=QVBoxLayout()
  vbox.addWidget(lab1)
  win.setLayout(vbox)
  win.setWindowTitle("QPixmap 例子")
  win.show()
  sys.exit(app.exec_())


代码运行结果:

147a3e2ceaae4c8f9a8872407f4cd39c.png

相关文章
|
存储
STM32F103标准外设库——GPIO 输入、输出 (五)
STM32F103标准外设库——GPIO 输入、输出 (五)
902 0
STM32F103标准外设库——GPIO 输入、输出 (五)
|
7月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
11月前
|
数据可视化 IDE 开发者
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
2777 1
|
10月前
|
Python
pyqt6 制作一个颜色调节器 01
本文介绍了一个使用 PyQt 制作的颜色调节器,通过滑动滚动条或旋钮来调整 RGB 三色,实现颜色的微调。具体步骤包括:1. 设计 UI 页面;2. 分析颜色调整逻辑;3. 将数据反馈到 UI 页面。最终实现了颜色随滑块变化而实时更新的效果。
237 1
|
7月前
|
JSON API 数据格式
携程网获取景点列表 API 接口(携程 API 系列)
携程作为国内知名的在线旅游服务提供商,其景点列表API对接口功能、参数和返回格式进行了详细定义。该接口可获取景点基本信息(名称、地区、开放时间等),支持条件筛选查询(如按地区、评分、价格区间等)。接口返回JSON或XML格式数据,并设有调用限制以确保系统稳定性和数据安全。虽然携程未公开免费API,开发者可通过商务合作申请权限。以下为模拟Python请求示例,展示了如何使用该接口获取景点信息。 代码示例中,通过`requests.get()`发送GET请求,设置请求参数(如地区、门票价格等)和请求头(模拟浏览器访问),并处理响应数据。实际应用需替换为真实的接口URL,并遵循携程官方文档要求。
1584 0
|
SQL 缓存 Java
MyBatis最经典的20道面试题,你都会了吗?
MyBatis最经典的20道面试题,你都会了吗?
294 0
|
Python
超详细的Python中 pip 常用命令,值得收藏!
超详细的Python中 pip 常用命令,值得收藏!
426 0
『PyQt5-Qt Designer篇』| 07 Qt Designer中栅格布局和表单布局的使用
『PyQt5-Qt Designer篇』| 07 Qt Designer中栅格布局和表单布局的使用
331 0
|
Web App开发 JavaScript 前端开发
Qt(QtWebEngine)加载本地网页跨域问题的总结
Qt(QtWebEngine)加载本地网页跨域问题的总结
353 0
|
Python
在Python中绘制K线图,可以使用matplotlib和mplfinance库
【5月更文挑战第1天】使用Python的matplotlib和mplfinance库可绘制金融K线图。mplfinance提供便利的绘图功能,示例代码显示如何加载CSV数据(含开盘、最高、最低、收盘价及成交量),并用`mpf.plot()`绘制K线图,设置类型为'candle',显示移动平均线(mav)和成交量信息。可通过调整参数自定义图表样式,详情参考mplfinance文档。
653 2

热门文章

最新文章