pyqt5蒙版遮罩mask,setmask的使用
1.理解
mask()
和setmask()
一般是在pyqt繪圖時(shí)常見,而且在顯示不規(guī)則圖形時(shí)更是常見。
參考書籍上說:
setMask()函數(shù)的作用是為調(diào)用它的控件增加一個(gè)遮罩,遮住所選區(qū)域以外的部分,使控件看起來是透明的。它的參數(shù)可以是一個(gè)QBitmap對(duì)象或一個(gè)QRegion對(duì)象。
其實(shí)書上說的不錯(cuò),可惜我的理解能力達(dá)不到啊😂
接下來說說我的理解
當(dāng)
setmask()
添加的遮罩蒙版是QBitmap對(duì)象(就是黑白圖片)時(shí),和PS的蒙版作用是大體一致的,黑色就是把當(dāng)前調(diào)用的GUI界面變成蒙版,整個(gè)界面是黑色的。而白色可以透過當(dāng)前GUI界面,即如果把蒙版的區(qū)域涂成白色的話,就可以看到當(dāng)前蒙版下面的界面了。這和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()的作用是為調(diào)用它的控件增加一個(gè)遮罩,遮住所選區(qū)域以外的部分,使之看起來是透明的。 # 它的參數(shù)可以為QBitmap或QRegion對(duì)象,此處調(diào)用QPixmap的mask()函數(shù)獲得圖片自身的遮罩,是一個(gè)QBitmap對(duì)象, # 在示例中使用的是Png格式,它的透明部分實(shí)際上就是一個(gè)遮罩 ''' class PixWindow(QWidget): # 不規(guī)則窗體 """ 證明蒙版的作用,白色顯示當(dāng)前蒙版遮住的界面(不是gui界面,gui界面就是一個(gè)蒙版,可以看到蒙版的顏色是黑色,但可以通過設(shè)置界面透明度使黑色變成灰色),黑色遮蔽,mask之外的地方透明 """ def __init__(self): super().__init__() self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setStyleSheet('''background-color:black; ''') # self.setWindowOpacity(0.5) 設(shè)置透明度 print(self.geometry().x()) self.pix = QBitmap('mask.png') # 蒙版 self.resize(self.pix.size()) # 設(shè)置當(dāng)前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) # 畫刷,填充鋼筆畫的區(qū)域,填充白色是因?yàn)榘咨梢允姑砂嫱该? pp.setBrush(brush) # 畫一個(gè)矩形,【rectangle矩形】 self.startPoint = QPoint(5,5) self.endPoint = QPoint(300,200) pp.drawRect(QRect(self.startPoint, self.endPoint)) # 在蒙版mask上畫矩形, # 在蒙版mask上畫矩形,使矩形以內(nèi)蒙版是白色(可以說是在蒙版之外,使得gui界面透明了),以外蒙版是黑色 self.setMask(self.pix) # 把當(dāng)前整個(gè)GUI界面設(shè)置為蒙版 if __name__ == '__main__': app = QApplication(sys.argv) win = PixWindow() win.show() sys.exit(app.exec_())
注意要自己添加mask圖片才可以運(yùn)行程序
注意要自己添加mask圖片才可以運(yùn)行程序
注意要自己添加mask圖片才可以運(yùn)行程序
運(yùn)行結(jié)果
由于是把整個(gè)界面作為蒙版,所以沒有正常的關(guān)閉按鈕,可以IDE編輯器停止運(yùn)行按鈕來關(guān)閉程序,也可以通過其他方法
下面我來試一下把透明度設(shè)置為0.6,看看界面
self.setWindowOpacity(0.6)
注意要自己添加mask圖片
下面是我使用的mask圖片,歡迎使用
到此這篇關(guān)于pyqt5蒙版遮罩mask,setmask的使用的文章就介紹到這了,更多相關(guān)pyqt5蒙版遮罩 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas中Series和DataFrame的rank方法解析
pandas中的rank方法是用于數(shù)據(jù)排名的重要工具,它不返回排序后的數(shù)據(jù),而是數(shù)據(jù)的排名。rank方法可以處理相同數(shù)據(jù)的排名,通過平均排名方式解決排名沖突,并支持自定義排序規(guī)則及逆序排名。此外,DataFrame的rank方法允許在行或列上計(jì)算排名2024-09-09Python 實(shí)現(xiàn)字符串中指定位置插入一個(gè)字符
下面小編就為大家分享一篇Python 實(shí)現(xiàn)字符串中指定位置插入一個(gè)字符,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python+Pika+RabbitMQ環(huán)境部署及實(shí)現(xiàn)工作隊(duì)列的實(shí)例教程
RabbitMQ是一個(gè)消息隊(duì)列服務(wù)器,在本文中我們將學(xué)習(xí)到Python+Pika+RabbitMQ環(huán)境部署及實(shí)現(xiàn)工作隊(duì)列的實(shí)例教程,需要的朋友可以參考下2016-06-06Python讀取CSV文件的4種方法與注意事項(xiàng)
在python里面,讀取或?qū)懭隿sv文件時(shí)是經(jīng)常遇到的一個(gè)需求,這篇文章主要給大家介紹了關(guān)于Python讀取CSV文件的4種方法與注意事項(xiàng),需要的朋友可以參考下2023-10-10幾個(gè)適合python初學(xué)者的簡(jiǎn)單小程序,看完受益匪淺!(推薦)
這篇文章主要介紹了幾個(gè)適合python初學(xué)者的簡(jiǎn)單小程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python中ImportError錯(cuò)誤的詳細(xì)解決方法
最近辛辛苦苦安裝完了python,最后再運(yùn)行的時(shí)候會(huì)出現(xiàn)錯(cuò)誤,所以這篇文章主要給大家介紹了關(guān)于Python中ImportError錯(cuò)誤的詳細(xì)解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07