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发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
python列表操作实例
Jan 14 Python
Python中自定义函数的教程
Apr 27 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
python从入门到精通 windows安装python图文教程
May 18 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
PageFactory设计模式基于python实现
Apr 14 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
python 批量压缩图片的脚本
Jun 02 Python
如何正确理解python装饰器
Jun 15 Python
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
You might like
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
生产总经理岗位职责
2013/12/19 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
企业金融服务方案
2014/06/03 职场文书
工地安全生产标语
2014/06/06 职场文书
主要负责人任命书
2014/06/06 职场文书
财务管理专业自荐书
2014/09/02 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
Python中requests库的用法详解
2022/06/05 Python