当前位置:   article > 正文

PySide(PyQt),使用 QGraphicsOpacityEffect 设置小部件的整体显示透明度

PySide(PyQt),使用 QGraphicsOpacityEffect 设置小部件的整体显示透明度

  基本的demo      

        在 PySide6 中,可以使用 QGraphicsOpacityEffect 类来实现整体显示透明度。下面是一个简单的示例,演示了如何为 QLabel 设置透明度:

  1. from PySide6.QtWidgets import QApplication, QLabel, QGraphicsOpacityEffect, QVBoxLayout, QWidget
  2. app = QApplication([])
  3. # 创建主窗口
  4. window = QWidget()
  5. layout = QVBoxLayout(window)
  6. # 创建 QLabel
  7. label = QLabel("这是一个带有透明度的 QLabel")
  8. layout.addWidget(label)
  9. # 创建 QGraphicsOpacityEffect 对象
  10. opacity_effect = QGraphicsOpacityEffect()
  11. opacity_effect.setOpacity(0.5) # 设置透明度,0.0 完全透明,1.0 完全不透明
  12. # 应用效果到 QLabel
  13. label.setGraphicsEffect(opacity_effect)
  14. # 设置主窗口
  15. window.setLayout(layout)
  16. window.show()
  17. app.exec()

 制作一个动态闪烁的指示灯

  1. from PySide6.QtCore import QTimer
  2. from PySide6.QtWidgets import QApplication, QLabel, QGraphicsOpacityEffect, QVBoxLayout, QWidget
  3. app = QApplication([])
  4. # 创建主窗口
  5. window = QWidget()
  6. layout = QVBoxLayout(window)
  7. # 创建 QLabel
  8. label = QLabel()
  9. label.setFixedSize(20, 20) # 设置尺寸,长宽相等
  10. label.setStyleSheet('border:1px solid #868686;border-radius:10px;background-color: rgb(0, 255, 0);') # border-radius设置为尺寸的一半,就显示为圆形
  11. layout.addWidget(label)
  12. # 创建 QGraphicsOpacityEffect 对象
  13. opacity_effect = QGraphicsOpacityEffect()
  14. rate = 0.1 # 初始透明度
  15. # 定时器
  16. timer = QTimer()
  17. timer.start(200)
  18. # 定时器超时的槽函数
  19. def timeout_slot():
  20. global rate
  21. rate += 0.1
  22. if rate >= 1.5:
  23. rate = 0.1
  24. opacity_effect.setOpacity(rate) # 设置透明度,0.0 完全透明,1.0 完全不透明
  25. # 应用效果到 QLabel
  26. label.setGraphicsEffect(opacity_effect)
  27. timer.timeout.connect(timeout_slot)
  28. # 设置主窗口
  29. window.setLayout(layout)
  30. window.show()
  31. app.exec()

显示效果:

将其定义为类,方便使用 

  1. # 这是一个动态变化透明度的QLabel
  2. from PySide6.QtCore import QTimer
  3. from PySide6.QtWidgets import QApplication, QLabel, QGraphicsOpacityEffect, QVBoxLayout, QWidget
  4. class DynamicTransparencyLamp(QLabel):
  5. def __init__(self,parent=None):
  6. super().__init__(parent)
  7. self.clock = bool
  8. self.transparency_rate = 0.1
  9. self.opacity_effect = QGraphicsOpacityEffect()
  10. # 设置透明度并显示
  11. def setTransparency(self):
  12. self.transparency_rate += 0.1
  13. if self.transparency_rate >= 1.5:
  14. self.transparency_rate = 0.1
  15. self.opacity_effect.setOpacity(self.transparency_rate) # 设置透明度,0.0 完全透明,1.0 完全不透明
  16. # 应用效果到 QLabel
  17. self.setGraphicsEffect(self.opacity_effect)
  18. if __name__ == '__main__':
  19. app = QApplication([])
  20. # 创建主窗口
  21. window = QWidget()
  22. layout = QVBoxLayout(window)
  23. # 创建 QLabel
  24. label = DynamicTransparencyLamp()
  25. label.setFixedSize(20, 20) # 设置尺寸,长宽相等
  26. label.setStyleSheet('border:1px solid #868686;border-radius:10px;background-color: rgb(0, 255, 0);') # border-radius设置为尺寸的一半,就显示为圆形
  27. layout.addWidget(label)
  28. # 定时器
  29. timer = QTimer()
  30. timer.start(200)
  31. # 定时器超时的槽函数
  32. def timeout_slot():
  33. label.setTransparency()
  34. timer.timeout.connect(timeout_slot)
  35. # 设置主窗口
  36. window.setLayout(layout)
  37. window.show()
  38. app.exec()

项目中的应用:摄像指示灯

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/862503
推荐阅读
相关标签
  

闽ICP备14008679号