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中私有函数调用方法解密
Apr 29 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
Django 重写用户模型的实现
Jul 29 Python
详解python中的index函数用法
Aug 06 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
Python 操作SQLite数据库的示例
Oct 16 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
Python数据分析入门之数据读取与存储
May 13 Python
Python+DeOldify实现老照片上色功能
Jun 21 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
PHP技术开发微信公众平台
2015/07/22 PHP
提高php编程效率技巧
2015/08/13 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
js实现图片360度旋转
2017/01/22 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
教你安装python Django(图文)
2013/11/04 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
机械制造专业个人的自我评价
2013/12/28 职场文书
八年级美术教学反思
2014/02/02 职场文书
小学生手册家长评语
2014/04/16 职场文书
大学新生入学教育方案
2014/05/16 职场文书
公司离职证明标准格式
2014/11/18 职场文书
2016年少先队活动总结
2016/04/06 职场文书
python实现进度条的多种实现
2021/04/29 Python