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 相关文章推荐
怎么使用pipenv管理你的python项目
Mar 12 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 Python
python实现批量图片格式转换
Jun 16 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
python pygame实现挡板弹球游戏
Nov 25 Python
TensorFlow tensor的拼接实例
Jan 19 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
pytorch SENet实现案例
Jun 24 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
Python的property属性详细讲解
Apr 11 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
Yii2单元测试用法示例
2016/11/12 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
js日历功能对象
2012/01/12 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
python算法演练_One Rule 算法(详解)
2017/05/17 Python
用Python实现随机森林算法的示例
2017/08/24 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
某公司面试题
2012/03/05 面试题
自我鉴定范文200字
2013/10/02 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
优秀教研组申报材料
2014/12/26 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
大学生村官入党自传
2015/06/26 职场文书
大学军训通讯稿
2015/07/18 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
python画条形图的具体代码
2022/04/20 Python