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中将阿拉伯数字转换成中文的实现代码
May 19 Python
python之yield表达式学习
Sep 02 Python
python创建进程fork用法
Jun 04 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
Tensorflow累加的实现案例
Feb 05 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
python编写扎金花小程序的实例代码
Feb 23 Python
怎么用Python识别手势数字
Jun 07 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
Python检测网络延迟的代码
2018/05/15 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Python字符串对象实现原理详解
2019/07/01 Python
使用python画社交网络图实例代码
2019/07/10 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
药品采购员岗位职责
2014/02/08 职场文书
最常使用的求职信
2014/05/25 职场文书
大型公益活动策划方案
2014/08/20 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
学习心得体会
2019/06/20 职场文书
python - asyncio异步编程
2021/04/06 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技