PyQt自定義控件之實現全透明窗口

一般我們設計的普通窗口是這樣子的:

class MyWidget(QWidget):
    def __init__(self):
        super(MyWidget, self).__init__()
        self.resize(320, 240)				# 窗口的大小
        self.setWindowTitle('Test')			# 窗口標題
        self.setObjectName('MyWidget')		
        self.setStyleSheet("QWidget#MyWidget{background:grey;}")	# 給窗口添加個背景顏色

效果如下:
在這裏插入圖片描述


給它加個圖片

class MyWidget(QWidget):
    def __init__(self):
        super(MyWidget, self).__init__()
        
		# 窗口設置
        self.resize(320, 240)				
        self.setWindowTitle('Test')			
        self.setObjectName('MyWidget')		
        self.setStyleSheet("QWidget#MyWidget{background:grey;}")
		
		# 添加個標籤圖片
        self.label = QLabel(self)
        self.label.setGeometry(120, 80, 66, 66)
        self.label.setPixmap(QPixmap('./image/gift.png'))

效果如下
在這裏插入圖片描述


好了,現在我們要去除整個背景,只留下中間那個圖片

class MyWidget(QWidget):
    '''實現全透明窗口'''

    def __init__(self):
        super(MyWidget, self).__init__()

        # 去除背景
        self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)

        # 窗口設置
        self.resize(320, 240)
        self.setWindowTitle('Test')
        self.setObjectName('MyWidget')
        self.setStyleSheet("QWidget#MyWidget{background:grey;}")

        # 添加個標籤圖片
        self.label = QLabel(self)
        self.label.setGeometry(120, 80, 66, 66)
        self.label.setPixmap(QPixmap('./image/gift.png'))

效果如下
在這裏插入圖片描述


這種實現方式主要依靠的是設置窗口的標誌位屬性值

標誌位:Qt.FramelessWindowHint 去除窗口的邊框
屬性值:Qt.WA_TranslucentBackground 設置窗口爲背景透明
必須要配合這兩個一起使用,否則都無法移除背景

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章