1.理解
mask()
和setmask()
一般是在pyqt繪圖時常見,而且在顯示不規則圖形時更是常見。
參考書籍上說:
setmask()函數的作用是為調用它的控件增加一個遮罩,遮住所選區域以外的部分,使控件看起來是透明的。它的參數可以是一個qbitmap對象或一個qregion對象。
其實書上說的不錯,可惜我的理解能力達不到啊
接下來說說我的理解
當
setmask()
添加的遮罩蒙版是qbitmap對象(就是黑白圖片)時,和ps的蒙版作用是大體一致的,黑色就是把當前調用的gui界面變成蒙版,整個界面是黑色的。而白色可以透過當前gui界面,即如果把蒙版的區域涂成白色的話,就可以看到當前蒙版下面的界面了。這和ps也是一致的。
而mask()
一般是給圖片自己增加蒙版
2.例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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,看看界面
1
|
self.setwindowopacity(0.6) |
注意要自己添加mask圖片
下面是我使用的mask圖片,歡迎使用
到此這篇關于pyqt5蒙版遮罩mask,setmask的使用的文章就介紹到這了,更多相關pyqt5蒙版遮罩 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_38463737/article/details/110312552