pyqt5蒙版遮罩mask,setmask的使用
作者:集电极 发布时间:2022-04-05 21:00:58
标签:pyqt5,蒙版遮罩
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图片才可以运行程序
运行结果
由于是把整个界面作为蒙版,所以没有正常的关闭按钮,可以IDE编辑器停止运行按钮来关闭程序,也可以通过其他方法
下面我来试一下把透明度设置为0.6,看看界面
self.setWindowOpacity(0.6)
注意要自己添加mask图片
下面是我使用的mask图片,欢迎使用
来源:https://blog.csdn.net/qq_38463737/article/details/110312552


猜你喜欢
- 代码如下: function astro(birth) astro="" if birth=""
- 导语随着网购的广泛普及,现在大部分年轻人都喜欢上了网购的方式。很多东西物美价廉,出不出户也能满足你的购买需求!尤其是中秋来临,哪些假期短回不
- 前言大家应该都有所体会,在windows系统使用久了就会产生一些“垃圾”文件。这些文件有的是程序的临时文件,有的是操作记录或日志等。垃圾随着
- pytorch中训练完网络后,需要对学习的结果进行测试。官网上例程用的方法统统都是正确率,使用的是torch.eq()这个函数。但是为了更精
- js模拟随机抽奖程序代码!相关文章推荐:随机6+1选号码摇奖程序 <html><title>模拟抽奖-asp之家&l
- Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼、富有朝气。但也许你还没有发现并应用它的一些更高级的功能吧
- #encoding=utf-8#------------------------------------------------------
- 在Python中,正则表达式的group和groups方法是非常有用的函数,用于处理匹配结果的分组信息。group方法是re.MatchOb
- 图片的间隙Q:我有一张大图片,把它切割后在Dreamweaver中进行拼接,可是总是有间隙,不知为什么?A:不知你是否把表格的边距、间距和边
- globalStorage 这个也是html5中提出来,在浏览器关闭以后,使用globalStorage存储的信息仍能够保留下来,并且存储容
- Git是一个开源的分布式版本控制系统,用于高效的管理各种大小项目和文件。有着管理多样化、分享速度快、数据
- 什么是ODBCODBC是open database connect的缩写,意思是开放式数据库连接利用ODBC进行数据库连接首先要下载数据库!
- 在python开发中,经常会出现调用子文件夹下的py模块如上图,如果在test.py文件中,要调用meeting文件夹下面的huodongs
- 由于是上线的项目且已经按照数据逻辑去渲染了能看懂的看逻辑吧。有点多效果如图<template> <div class=&q
- 往期学习:python数据类型: python数据结构:数据类型.python的输入输出: python数据结构之输入输出及控制和异常.py
- WordPress可以改造成twitter一样的微博网站,但是有一个坏处就是你要么用来做博客要么用来做微博,功能难兼得。相信大家在访问一些知
- 在使用Python库时,常常会用到matplotlib.pyplot绘图,本文介绍在PyCharm及Jupyter Notebook页面中控
- 1. 目的在 C/C++ 开发中使用了第三方库,具体说是 .a, .lib, .dll 等文件,想通过 Python 查询出这些文件中的版本
- 将json转为结构体时,经常会遇到无法确定某个字段类型的情况。在Go中可以使用interface 任意类型来解决。// convert js
- vm.$delete()vm.$delete用法见官网。为什么需要Vue.delete()?在ES6之前, JS没有提供方法来侦测到一个属性