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 base64编码解码实例
Jun 21 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
500行代码使用python写个微信小游戏飞机大战游戏
Oct 16 Python
python神经网络编程实现手写数字识别
May 27 Python
python新手学习使用库
Jun 11 Python
Python操作Word批量生成合同的实现示例
Aug 28 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP高自定义性安全验证码代码
2011/11/27 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
Python的lambda匿名函数的简单介绍
2013/04/25 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python中join和split用法实例
2015/04/14 Python
讲解Python中的标识运算符
2015/05/14 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
JPA面试常见问题
2016/11/14 面试题
教师年终个人自我评价
2013/10/04 职场文书
餐厅考勤管理制度
2014/01/28 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
演讲开场白台词大全
2015/05/29 职场文书
社会实践心得体会范文
2016/01/14 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
解决mysql的int型主键自增问题
2021/07/15 MySQL