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实现端口复用实例代码
Jul 03 Python
Windows系统下多版本pip的共存问题详解
Oct 10 Python
详解Python之unittest单元测试代码
Jan 24 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
基于Python实现扑克牌面试题
Dec 11 Python
python 统计文件中的字符串数目示例
Dec 24 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
解决Python字典查找报Keyerror的问题
May 26 Python
Python os和os.path模块详情
Apr 02 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
dedecms模版制作使用方法
2007/04/03 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
Python NumPy库安装使用笔记
2015/05/18 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
四年大学自我鉴定
2014/02/17 职场文书
运动会加油口号
2014/06/07 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
小型婚礼主持词
2015/06/30 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android