基本的demo
在 PySide6 中,可以使用 QGraphicsOpacityEffect 类来实现整体显示透明度。下面是一个简单的示例,演示了如何为 QLabel 设置透明度:
from PySide6.QtWidgets import QApplication, QLabel, QGraphicsOpacityEffect, QVBoxLayout, QWidget
app = QApplication([])
# 创建主窗口
window = QWidget()
layout = QVBoxLayout(window)
# 创建 QLabel
label = QLabel("这是一个带有透明度的 QLabel")
layout.addWidget(label)
# 创建 QGraphicsOpacityEffect 对象
opacity_effect = QGraphicsOpacityEffect()
opacity_effect.setOpacity(0.5) # 设置透明度,0.0 完全透明,1.0 完全不透明
# 应用效果到 QLabel
label.setGraphicsEffect(opacity_effect)
# 设置主窗口
window.setLayout(layout)
window.show()
app.exec()
制作一个动态闪烁的指示灯
from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QApplication, QLabel, QGraphicsOpacityEffect, QVBoxLayout, QWidget
app = QApplication([])
# 创建主窗口
window = QWidget()
layout = QVBoxLayout(window)
# 创建 QLabel
label = QLabel()
label.setFixedSize(20, 20) # 设置尺寸,长宽相等
label.setStyleSheet('border:1px solid #868686;border-radius:10px;background-color: rgb(0, 255, 0);') # border-radius设置为尺寸的一半,就显示为圆形
layout.addWidget(label)
# 创建 QGraphicsOpacityEffect 对象
opacity_effect = QGraphicsOpacityEffect()
rate = 0.1 # 初始透明度
# 定时器
timer = QTimer()
timer.start(200)
# 定时器超时的槽函数
def timeout_slot():
global rate
rate += 0.1
if rate >= 1.5:
rate = 0.1
opacity_effect.setOpacity(rate) # 设置透明度,0.0 完全透明,1.0 完全不透明
# 应用效果到 QLabel
label.setGraphicsEffect(opacity_effect)
timer.timeout.connect(timeout_slot)
# 设置主窗口
window.setLayout(layout)
window.show()
app.exec()
显示效果:
将其定义为类,方便使用
# 这是一个动态变化透明度的QLabel
from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QApplication, QLabel, QGraphicsOpacityEffect, QVBoxLayout, QWidget
class DynamicTransparencyLamp(QLabel):
def __init__(self,parent=None):
super().__init__(parent)
self.clock = bool
self.transparency_rate = 0.1
self.opacity_effect = QGraphicsOpacityEffect()
# 设置透明度并显示
def setTransparency(self):
self.transparency_rate += 0.1
if self.transparency_rate >= 1.5:
self.transparency_rate = 0.1
self.opacity_effect.setOpacity(self.transparency_rate) # 设置透明度,0.0 完全透明,1.0 完全不透明
# 应用效果到 QLabel
self.setGraphicsEffect(self.opacity_effect)
if __name__ == '__main__':
app = QApplication([])
# 创建主窗口
window = QWidget()
layout = QVBoxLayout(window)
# 创建 QLabel
label = DynamicTransparencyLamp()
label.setFixedSize(20, 20) # 设置尺寸,长宽相等
label.setStyleSheet('border:1px solid #868686;border-radius:10px;background-color: rgb(0, 255, 0);') # border-radius设置为尺寸的一半,就显示为圆形
layout.addWidget(label)
# 定时器
timer = QTimer()
timer.start(200)
# 定时器超时的槽函数
def timeout_slot():
label.setTransparency()
timer.timeout.connect(timeout_slot)
# 设置主窗口
window.setLayout(layout)
window.show()
app.exec()
项目中的应用:摄像指示灯