pyqt5蒙版遮罩mask,setmask的使用


Posted in Python onJune 11, 2021

1.理解

mask()setmask()一般是在pyqt绘图时常见,而且在显示不规则图形时更是常见。

参考书籍上说:

setMask()函数的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分,使控件看起来是透明的。它的参数可以是一个QBitmap对象或一个QRegion对象。

其实书上说的不错,可惜我的理解能力达不到啊?

接下来说说我的理解

setmask()添加的遮罩蒙版是QBitmap对象(就是黑白图片)时,和PS的蒙版作用是大体一致的,黑色就是把当前调用的GUI界面变成蒙版,整个界面是黑色的。而白色可以透过当前GUI界面,即如果把蒙版的区域涂成白色的话,就可以看到当前蒙版下面的界面了。这和PS也是一致的。

mask()一般是给图片自己增加蒙版

2.例子

import sys
from PyQt5.QtCore import Qt, QRect, QPoint
from PyQt5.QtWidgets import QWidget, QApplication, QDesktopWidget
from PyQt5.QtGui import QPixmap, QPainter, QBitmap, QCursor, QPen, QBrush
import PyQt5.QtCore as QtCore

'''
# setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分,使之看起来是透明的。
# 它的参数可以为QBitmap或QRegion对象,此处调用QPixmap的mask()函数获得图片自身的遮罩,是一个QBitmap对象,
# 在示例中使用的是Png格式,它的透明部分实际上就是一个遮罩
'''

class PixWindow(QWidget):  # 不规则窗体

    """
    证明蒙版的作用,白色显示当前蒙版遮住的界面(不是gui界面,gui界面就是一个蒙版,可以看到蒙版的颜色是黑色,但可以通过设置界面透明度使黑色变成灰色),黑色遮蔽,mask之外的地方透明
    """
    def __init__(self):
        super().__init__()
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
        self.setStyleSheet('''background-color:black; ''')
        # self.setWindowOpacity(0.5)  设置透明度
        print(self.geometry().x())

        self.pix = QBitmap('mask.png')  # 蒙版
        self.resize(self.pix.size())  # 设置当前GUI主界面和蒙版图片一致
        

    def paintEvent(self, event):  # 绘制窗口

        pp = QPainter(self.pix)  # 可以想象为给蒙版 pix 添加画手
        pen = QPen(Qt.red, 4)  # 钢笔
        # pen.setStyle(Qt.NoPen)  # 钢笔无颜色
        pp.setPen(pen)  # 可以想象为给画手钢笔
        brush = QBrush(Qt.white)   # 画刷,填充钢笔画的区域,填充白色是因为白色可以使蒙版透明
        pp.setBrush(brush)
        # 画一个矩形,【rectangle矩形】
        self.startPoint = QPoint(5,5)
        self.endPoint = QPoint(300,200)
        pp.drawRect(QRect(self.startPoint, self.endPoint))  # 在蒙版mask上画矩形,
        # 在蒙版mask上画矩形,使矩形以内蒙版是白色(可以说是在蒙版之外,使得gui界面透明了),以外蒙版是黑色
        self.setMask(self.pix)  # 把当前整个GUI界面设置为蒙版


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = PixWindow()
    win.show()
    sys.exit(app.exec_())

注意要自己添加mask图片才可以运行程序

注意要自己添加mask图片才可以运行程序

注意要自己添加mask图片才可以运行程序

运行结果

pyqt5蒙版遮罩mask,setmask的使用

由于是把整个界面作为蒙版,所以没有正常的关闭按钮,可以IDE编辑器停止运行按钮来关闭程序,也可以通过其他方法

下面我来试一下把透明度设置为0.6,看看界面

self.setWindowOpacity(0.6)

pyqt5蒙版遮罩mask,setmask的使用

注意要自己添加mask图片

下面是我使用的mask图片,欢迎使用

pyqt5蒙版遮罩mask,setmask的使用

到此这篇关于pyqt5蒙版遮罩mask,setmask的使用的文章就介绍到这了,更多相关pyqt5蒙版遮罩 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python学习笔记:字典的使用示例详解
Jun 13 Python
python模拟Django框架实例
May 17 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
详解python网络进程
Jun 15 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
前端路由&webpack基础配置详解
2019/06/10 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
js实现左右轮播图
2020/01/09 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
js实现全选和全不选
2020/07/28 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
python笔记(2)
2012/10/24 Python
python中os操作文件及文件路径实例汇总
2015/01/15 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
思想品德课教学反思
2014/02/10 职场文书
中国梦口号
2014/06/13 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
2015毕业寄语大全
2015/02/26 职场文书
员工自我工作评价
2015/03/06 职场文书
入党转正介绍人意见
2015/06/03 职场文书
摘录式读书笔记
2015/07/01 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
Python 语言实现六大查找算法
2021/06/30 Python
MySQL8.0的WITH查询详情
2021/08/30 MySQL