05.PyQt5基本窗口控件part3------PyQt5编程开发

本文详细介绍了PyQt5中的窗口绘图类控件,包括QPainter、QPen、QBrush和QPixmap的使用方法,以及如何利用它们进行文字、线条、形状的绘制和图像显示。此外,还探讨了QPixmap的图像加载和显示,以及QClipboard的剪贴板操作。最后,提到了QCalendar和QDateTimeEdit等时间日期控件,以及菜单栏、工具栏和状态栏的构建和使用。
摘要由CSDN通过智能技术生成

十、窗口绘图类控件

在PyQt5中,一般可以通过QPainter、QPen和QBrush这三个类来实现绘图功能。此外,QPixmap的作用是加载并呈现本地图像,而图像的呈现本质上也是通过绘图方式实现的,所以QPixmap也可以被视为绘图的一个类。

1、QPainter

    QPainter类在QWidget(控件)上执行绘图操作,绘图操作在QWidget.paintEvent()中完成。绘制方法必须放在QtGui.QPainter对象的begin()和end()之间。QPainter类常用方法:

    begin():开始在目标设备上绘制

    drawArc():在起始角度和最终角度之间画弧

    drawEllipse():在一个矩形内画一个椭圆

    drawLine(int x1,int y1,int x2,int y2):绘制一条指定了端点坐标的线。绘制从(x1,y1)到(x2,y2)的直线并设置当前画笔位置为(x2,y2)

    drawPixmap():从图像文件中提取Pixmap并将其显示在指定的位置

    drawPolygon():使用坐标数组绘制多边形

    drawRect(int x,int y,int w,int h):以给定的宽度w和高度h从左上角坐标(x,y)绘制一个矩形

    drawText():显示给定坐标处的文字

    fillRect():使用QColor参数填充矩形

    setBrush():设置画笔风格

    setPen():设置用于绘制的笔的颜色、大小和样式

还可以设置画笔风格(PenStyle),这个是一个枚举类,可以由QPainter类绘制,画笔风格如下:

    Qt.NoPen:没有线。

    Qt.SolidLine:一条简单的线

    Qt.DashLine:由一些像素分隔的短线

    Qt.DotLine:由一些像素分隔的点

    Qt.DashDotLine:轮流交替的点和短线

    Qt.DashDotDotLine:一条短线、两个点

    Qt.MPenStyle:画笔风格的掩码

 例一:绘制文字

    

# -*- 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_())

运行结果:

    

例二、绘制点

# -*- 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_())

运行结果:


2、Qpen

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

例子:

# -*- coding: utf-8 -*-
   
  """
  【简介】
  绘图中QPen 的例子 ,绘制使用不同样式的6条线
 
 
  """
   
  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)
  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)
  pen.setDashPattern([1, 4, 5, 4])
  qp.setPen(pen)
  qp.drawLine(20, 240, 250, 240)
   
  if __name__ == '__main__<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值