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完全新手教程
Feb 08 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
wxPython的安装与使用教程
Aug 31 Python
Python使用gRPC传输协议教程
Oct 16 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
Java多线程实现四种方式原理详解
Jun 02 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
使用Python操作MySQL的小技巧
Sep 10 Python
python 多态 协议 鸭子类型详解
Nov 27 Python
python如何将mat文件转为png
Jul 15 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
python自动生成model文件过程详解
2019/11/02 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
Python pandas库中的isnull()详解
2019/12/26 Python
python和c语言哪个更适合初学者
2020/06/22 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
转预备党员政审材料
2014/02/06 职场文书
四下基层实施方案
2014/03/28 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
爱国电影观后感
2015/06/19 职场文书