PYQT5(12)-基本窗口控件-窗口绘图类空间
一般通过QPainter、QPen和QBrush这三个类来实现绘图功能。QPixmap的作用是加载并呈现本
地图像,其图像的呈现本质上也是通过绘图方式实现的。
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 | 没有线。比如QPainter.drawRect()填充,但没有绘制任何边界线 |
Qt.SolidLine | 一条简单的线 |
Qt.DashLine | 由一些像素分隔的短线 |
Qt.DotLine | 由一些像素分隔的点 |
Qt.DashDotLine | 轮流交替的点和短线 |
Qt.DashDotDotLine | 一条短线、两个点 |
Qt.MPenStyle | 画笔风格的掩码 |
代码示例1
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qtclass 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_())
代码示例2
import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qtclass 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.0y = -50 * math.sin((x - size.width() / 2.0) * math.pi / 50) + size.height() / 2.0qp.drawPoint(int(x), int(y))if __name__ == '__main__':app = QApplication(sys.argv)demo = Drawing()demo.show()sys.exit(app.exec_())
QPen
QPen(钢笔)是一个基本的图形对象,用于绘制直线、曲线或者给轮廓画出矩形、椭圆形、多边形及其他形状等。
代码示例
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qtclass 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__':app = QApplication(sys.argv)demo = Drawing()demo.show()sys.exit(app.exec_())
QBrush
QBrush(画刷)是一个基本的图形对象,用于填充如矩形、椭圆形或多边形等形状。QBrush有三种类型:预定义、过渡和纹理图案。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qtclass 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)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对象 |
grabWidget() | 从给定的窗口小控件创建一个像素图 |
grabWindow() | 在窗口中创建数据的像素图 |
load() | 加载图像文件作为QPixmap对象 |
save() | 将QPixmap对象保存为文件 |
tolmage() | 将QPixmap对象转换为QImage对象 |
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_())
PYQT5(12)-基本窗口控件-窗口绘图类空间相关推荐
- C++ Windows窗口程序:子窗口控件之按钮类button
Windows窗口程序设计中,按钮.文本编辑框等控件都作为一个子窗口在WM_CREATE事件中创建的.其中按钮类button有多种类型和风格,常见的单选钮.复选钮.分组框也在此类中,见下表: 子窗口控 ...
- qpython3可视图形界面_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法...
QWidget基本介绍 基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口或者控件都直接或者间接的继承自QWidget类. 窗口坐标系统 PyQt使用统一的坐标系统来定位窗口控件的位置和 ...
- PYQT5(13)-基本窗口控件-拖曳与剪贴板
Drag与Drop 为用户提供的拖曳功能很直观,在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成. 基于MIME类型(Multipurpose Internet Mail Extension, ...
- python gui界面 tcp_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
QWidget基本介绍 基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口或者控件都直接或者间接的继承自QWidget类. 窗口坐标系统 PyQt使用统一的坐标系统来定位窗口控件的位置和 ...
- 实战PyQt5: 052-停靠窗口控件QDockWidget
QDockWidget简介 在很多桌面应用软件中,比如Qt的C++ IDE集成开发环境Qt Creater, 宇宙第一集成开发环境Visual Studio等工程软件,都使用了停靠窗口布局,这样做有一 ...
- mfc e将控件置于窗口顶层_PyQt5学习笔记04 - QWidget窗口控件基类
本来这一篇是想写一下怎么使用Qt Designer去设计一个界面的,但是我现在通常都是用代码去直接写界面很少用设计器.因为Qt Designer并不是为了python而写的,所以用起来不是很方便.很多 ...
- win32 20子窗口控件的代码
汇编代码: ;>>>>>>>>>>>>>>>>>>>>>>>& ...
- python 窗体控件_python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐(二)...
1 #-*- coding: UTF-8 -*- 2 #python tkinter menu 3 #python version 3.3.2 4 #EN = Window 7 5 6 7 from ...
- python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐
在了解python中的tkinter模块的时候,你需要了解一些tkinter的相关知识 下面是python的API文档中的一个简单例子: 1 import tkinter as tk 2 3 clas ...
最新文章
- java字符存储,在什么编码是Java字符存储在?
- 【分类算法】Logistic算法原理、标准评分卡开发流程、python代码案例
- 显示部分数据标签_长春市农贸市场监测数据显示:粮油和水果价格平稳,部分副食品价格小幅波动...
- Linux中的查找命令
- junit5 与 surefire 对接使用
- 解决在非Activity中使用startActivity
- 8步教你打开Android之门 NDK入门教程
- Android平台使用Camera2(5.0+)替代过时的Camera
- Python测试开发django2.环境部署项目创建
- 耶鲁华裔硕士被击数枪身亡,嫌犯疑竟是MIT博士生,曾获奥数银牌
- Spark算子:RDD键值转换操作(5)–leftOuterJoin、rightOuterJoin、subtractByKey
- 随手记---Pharming
- 数据结构与程序的关系_java主程:数据结构和算法的区别别再搞混了,否则开除...
- 融合不是冗余,全栈自研才有出路?特斯拉/Mobileye这样做
- 2022年流行的Java框架有哪些?
- js回调html的函数,JS回调函数简单用法示例
- 从零开始搭建环境安装FCOS(Ubuntu18.04)
- 华为机试--字符串ASC码+偏移量实现加密
- 立创商城中的元件应用到AD中的一些经验
- 串的定长顺序存储结构|C++实现