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

相关文章
|
7月前
|
C++
《QT从基础到进阶·十五》用鼠标绘制矩形(QGraphicsView、QPainter、QGraphicsRectItem)
《QT从基础到进阶·十五》用鼠标绘制矩形(QGraphicsView、QPainter、QGraphicsRectItem)
246 0
|
7月前
PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
40 0
|
10月前
|
C++
QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 始篇
详细的介绍可以看QT的官方助手,那里面介绍的详细且明白,需要一定的英语基础,我这里直接使用一个开源项目来介绍QGraphicsView、QGraphicsScene的使用。
214 1
|
C++
C/C++ Qt QChart 绘图组件应用
QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于`GraphicsView`模式实现,其核心是`QChartView`和`QChart`的二次封装版。
380 0
C/C++ Qt QChart 绘图组件应用
|
数据可视化 计算机视觉
VTK 基础(一) — 常用控件介绍及实现圆锥体绘制
最近在做医学图像的相关处理,其中用到了可视化程序包 VTK,在学习过程中,准备写一系列相关教程,一方面用于巩固自己所学,主要自己太笨图片,另一方面加强一下知识理解。 利用 VTK 进行绘制物体时,常用到的组件有下面几种,为了加深理解,VTK 把一个物体的渲染过程比喻成了一场演出(真的很形象图片):
VTK 基础(一) — 常用控件介绍及实现圆锥体绘制
|
算法 数据可视化
【QT】图形视图、动画框架
【QT】图形视图、动画框架
【QT】图形视图、动画框架
Python Qt GUI设计:QPainter、QPen、QBrush和QPixmap窗口绘图类(基础篇—17)
Python Qt GUI设计:QPainter、QPen、QBrush和QPixmap窗口绘图类(基础篇—17)
Python Qt GUI设计:QPainter、QPen、QBrush和QPixmap窗口绘图类(基础篇—17)
Python Qt GUI设计:QSlider滑动条类(基础篇—16)
Python Qt GUI设计:QSlider滑动条类(基础篇—16)
Python Qt GUI设计:QSlider滑动条类(基础篇—16)
|
程序员
Qt编写自定义控件63-水波效果
一、前言 几年前就一直考虑过写这个控件了,在9年前用C#的时候,就看到过别人用C#写了个水波效果的控件,挺好玩的,当时看了下代码用的二维数组来存储变换的图像像素数据,自从学了Qt以后,有过几次想要用Qt写一个版本,当时功力尚浅,尝试过了没写成功,我记得还有个用汇编写的dll提供调用,那个效率贼高,用CPU绘制的话效率相对来说低很多。
1269 0
|
程序员 C语言 开发工具
Qt编写自定义控件59-直方动态图
一、前言 直方动态图类似于音乐播放时候的柱状图展示,顶部提供一个横线条,当柱状上升的时候,该线条类似于帽子的形式冲到顶端,相当于柱状顶上去的感觉,给人一种动态的感觉,听音乐的同时更加赏心悦目,原理比较简单,就是用2个定时器,一个定时器间隔比较短,负责快速把柱状图从底部冲到设置的值,同时横线条跟随一起冲上去,一个定时器负责慢慢的跌落值到0,然后横线条缓慢下降,下降速度比柱状图的速度要慢一些,产生一种对比的效果,看起来更像是跌落的感觉。
1085 0

热门文章

最新文章