温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PyQt5——窗口绘图类控件

发布时间:2020-08-07 22:53:38 来源:ITPUB博客 阅读:188 作者:ckxllf 栏目:编程语言

  窗口绘图类控件

  在PyQt5中,一般可以通过QPainter、QPen和QBrush这三个类来实现绘图的功能。

  QPainter

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

  绘制操作在QWidget.painEvent()中完成,绘制方法必须放在QtGui.QPainter对象的begin()和end()之间。QPainter类在控件或其他绘图设备上执行较低级别的图形绘制功能。

  方法

  方法  描述

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

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

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

  drawLine(int x1,int y1,int x2,int y2)  绘制一条指定了端点坐标的线。

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

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

  drawReact()  给定宽度w和高度h从左上角(x,y)绘制一个矩形

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

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

  setBrush()  设置画笔风格

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

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

  枚举类型  描述

  Qt.NoPen  没有线,比如QPainter.drawRect()填充,但没有绘制任何边界线

  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 *

  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(self)

  qp.begin(self)

  self.drawPoints(qp)

  qp.end()

  def drawPoints(self,qp):

  qp.setPen(Qt.red)

  size = self.size()

  for i in range(1000):

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

  QPen

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

  # -*- coding: utf-8 -*-

  import sys

  from PyQt5.QtWidgets import *

  from PyQt5.QtGui import *

  from PyQt5.QtCore import *

  class Drawing(QWidget):

  def __init__(self):

  super().__init__()

  self.initUI()

  def initUI(self):

  self.setGeometry(300,300,280,270)

  self.setWindowTitle("钢笔样式例子")

  def paintEvent(self, QPaintEvent):

  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__':

  app = QApplication(sys.argv)

  demo = Drawing()

  demo.show()

  sys.exit(app.exec_())

  使用Qt.CustomDashLine创建线条样式,然后调用setDashPattern()方法使用数字列表定义样式,数字列表的个数必须是偶数,在本例中数字列表[1,4,5,4]它的个数是4,奇数位代表一段横线,偶数为代表两端横线之间的空余距离。

  QBrush

  QBrush是一个基本的图形对象,用于填充如矩形、椭圆形或多边形等形状。QBrush有三种类型:预定义、过渡和纹理图案。 无锡看妇科的医院 http://www.ytsgfk120.com/

  # -*- 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, QPaintEvent):

  qp = QPainter()

  qp.begin(self)

  self.drawLines(qp)

  qp.end()

  def drawLines(self,qp):

  brush = QBrush(Qt.SolidPattern)

  qp.setBrush(brush)

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

  QPixmap

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

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

  常用的方法

  方法  描述

  copy()  从QRect对象复制到QPixmap对象

  fromImage()  将QImage对象转换为QPixmap对象

  gradWidget()  从给定的窗口小控件创建一个像素图

  load()  加载图像文件作为QPixmap对象

  save()  将QPixmap对象保存为文件

  toImage()  将QPixmap对象转换为QImage对象

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

  labl = QLabel()

  labl.setPixmap(QPixmap("./images/python.jpg"))

  vbox = QVBoxLayout()

  vbox.addWidget(labl)

  win.setLayout(vbox)

  win.setWindowTitle("QPixmap例子")

  win.show()

  sys.exit(app.exec_())

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI