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 相关文章推荐
Python2.5/2.6实用教程 入门基础篇
Nov 29 Python
Python中异常重试的解决方案详解
May 05 Python
Python守护线程用法实例
Jun 23 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
10招!看骨灰级Pythoner玩转Python的方法
Apr 15 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
Python接口自动化测试的实现
Aug 28 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
PHP 上传文件的方法(类)
2009/07/30 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
PHP 正则表达式小结
2015/02/12 PHP
如何在PHP中使用数组
2020/06/09 PHP
js下获取div中的数据的原理分析
2010/04/07 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python延时操作实现方法示例
2018/08/14 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
高中生的学习总结自我鉴定
2013/10/26 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python