从零开始学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

相关文章
|
前端开发 Python
【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能
【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能
492 0
解决删除文件时出现“该项目不在XX中,请确认该项目的位置然后重试”的提示
近期在删除文件夹的时候,出现了这个“该项目不在XX中,请确认该项目的位置然后重试”的提示,实际上这个文件(夹)就在那里,死活都删不掉,win10系统重启之后删除都不行的
11270 0
|
11月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
数据可视化 IDE 开发者
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
3165 1
|
存储 C++ 容器
(3)Qt中的变体数据类型(QVariant)
QVariant是Qt中一个强大的变体数据类型,能够存储和管理多种Qt和C++基本数据类型,包括自定义类型,并通过setValue()和value()方法进行赋值和取值。
955 9
(3)Qt中的变体数据类型(QVariant)
|
网络协议 网络架构
『PyQt5-Qt Designer篇』| 07 Qt Designer中栅格布局和表单布局的使用
『PyQt5-Qt Designer篇』| 07 Qt Designer中栅格布局和表单布局的使用
450 0
使用QMovie类来实现在QT中的动态加载效果。
使用QMovie类来实现在QT中的动态加载效果。
778 0
|
SQL 存储 数据库
Android数据库框架该如何选?
Android数据库框架该如何选?
690 0
|
存储 机器学习/深度学习 编解码
小白白也能学会的 PyQt 教程 —— 图像类及图像相关基础类介绍
图,貌似是一个好看的 UI 中必不可少的东西,精美的 UI 中不可避免的会使用一些奇特的各种图像元素来提升用户体验。对于开发者而言,如何在应用程序中有效地显示和处理图像成为一个重要的课题。在Python中,PyQt库是一个强大而灵活的选择,它提供了丰富的图像处理类和功能。 PyQt中的图像类和组件使开发者能够加载、保存、绘制和转换图像,从而实现各种图像操作。其中,常用的图像类包括QPixmap、QImage和QIcon。QPixmap和QImage提供了基本的图像处理功能,可以加载、保存、缩放、剪裁和绘制图像。QIcon则用于在GUI应用程序中显示图标,可以加载图像文件并在按钮、菜单等控件上展
678 1

热门文章

最新文章