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;}")	# 给窗口添加个背景颜色

效果如下:
PyQt自定义控件之实现全透明窗口_第1张图片


给它加个图片

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'))

效果如下
PyQt自定义控件之实现全透明窗口_第2张图片


好了,现在我们要去除整个背景,只留下中间那个图片

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'))

效果如下
PyQt自定义控件之实现全透明窗口_第3张图片


这种实现方式主要依靠的是设置窗口的标志位属性值

标志位:Qt.FramelessWindowHint 去除窗口的边框
属性值:Qt.WA_TranslucentBackground 设置窗口为背景透明
必须要配合这两个一起使用,否则都无法移除背景

你可能感兴趣的:(PyQt,pyqt,自定义控件)