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的Django框架中创建模板库的方法
Jul 20 Python
浅析Python中的多条件排序实现
Jun 07 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
tensorflow识别自己手写数字
Mar 14 Python
Python3几个常见问题的处理方法
Feb 26 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 Python
Python ini文件常用操作方法解析
Apr 26 Python
Django serializer优化类视图的实现示例
Jul 16 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
使用python绘制分组对比柱状图
Apr 21 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
让你的网站首页自动选择语言转跳
2006/12/06 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
vue-loader教程介绍
2017/06/14 Javascript
js动态引入的四种方法
2018/05/05 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
python实现排序算法
2014/02/14 Python
浅谈python3中input输入的使用
2019/08/02 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
tensorflow如何批量读取图片
2019/08/29 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
医药代表个人的求职信分享
2013/12/08 职场文书
企划专员岗位职责
2013/12/09 职场文书
干部行政关系介绍信
2014/01/17 职场文书
分层教学实施方案
2014/03/19 职场文书
销售团队获奖感言
2014/08/14 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
写给导师的自荐信
2015/03/06 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android