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中反射用法实例
Mar 27 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
Python实现多线程的两种方式分析
Aug 29 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 Python
详解Python requests模块
Jun 21 Python
python库sklearn常用操作
Aug 23 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
关于svn冲突的解决方法
2013/06/21 PHP
解析php中的escape函数
2013/06/29 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
jquery json 实例代码
2010/12/02 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
Node.js学习入门
2017/01/03 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
python多线程同步之文件读写控制
2021/02/25 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python selenium xpath定位操作
2020/09/01 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
2015年政风行风工作总结
2015/04/21 职场文书
党员发展大会主持词
2015/07/03 职场文书
解析目标检测之IoU
2021/06/26 Python
简单谈谈Python面向对象的相关知识
2021/06/28 Python
python全面解析接口返回数据
2022/02/12 Python