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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
学习python类方法与对象方法
Mar 15 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
windows下python安装pip图文教程
May 25 Python
对python程序内存泄漏调试的记录
Jun 11 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
Python实现微信表情包炸群功能
Jan 28 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
jquery实现居中弹出层代码
2010/08/25 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
Python清空文件并替换内容的实例
2018/10/22 Python
在python中bool函数的取值方法
2018/11/01 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
flask 实现token机制的示例代码
2019/11/07 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
Python中过滤字符串列表的方法
2020/12/22 Python
总经理助理岗位职责
2013/11/08 职场文书
学校七一活动方案
2014/01/19 职场文书
小学课外活动总结
2014/07/09 职场文书
授权收款委托书范本
2014/10/10 职场文书
保研推荐信格式
2015/03/25 职场文书
可怜妈妈观后感
2015/06/09 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers