python - Qt5 中子部件的透明度
问题描述
我使用 Nvidia Jetson Nano 和 Linux for Tegra(Ubuntu 18、X11 窗口系统)、Python 3.6 和 PyQt5。我想在主小部件上放置一个透明小部件(或具有透明背景)。
当这些小部件独立创建时,一切都会正确显示。即使 gstreamer 视频流显示在主小部件中,透明度仍然有效。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setGeometry(50,50,320,240)
self.setWindowTitle("Main Window")
self.setStyleSheet("background-color:yellow;")
self.label = QLabel(self)
self.label.setText("Main Widget")
self.menu = MenuWidget()
class MenuWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setWindowFlags(Qt.Tool)
self.setGeometry(100,100,100,50)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setStyleSheet("background-color:gray;")
self.setWindowOpacity(0.5)
self.label = QLabel(self)
self.label.setText("Menu Widget")
app = QApplication([])
window = MainWindow()
window.show()
window.menu.show()
sys.exit(app.exec_())
当我尝试创建一个小部件作为主小部件的子小部件时,透明度不起作用。如果显示视频,则主窗口小部件窗口中会出现一个“洞”。
class MainWindow(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setGeometry(50,50,320,240)
self.setWindowTitle("Main Window")
self.setStyleSheet("background-color:yellow;")
self.label = QLabel(self)
self.label.setText("Main Widget")
self.menu = MenuWidget(parent=self)
print('main window created')
class MenuWidget(QWidget):
def __init__(self, parent):
QWidget.__init__(self, parent)
self.setWindowFlags(Qt.Tool)
self.setGeometry(100,100,100,50)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setStyleSheet("background-color:gray;")
self.setWindowOpacity(0.5)
self.label = QLabel(self)
self.label.setText("Menu Widget")
app = QApplication([])
window = MainWindow()
window.show()
sys.exit(app.exec_())
此外,如果我为子小部件设置属性 self.setAttribute(Qt.WA_TranslucentBackground),主窗口中会出现一个“洞”(如果视频正在此窗口中播放)。
如何为子小部件设置透明度?提前感谢您的回答!
解决方案
顾名思义,windowOpacity
指的是窗口的不透明度。
如果要设置子小部件的不透明度,则需要使用QGraphicsOpacityEffect:
class MenuWidget(QWidget):
def __init__(self, parent):
QWidget.__init__(self, parent)
# ...
self.setGraphicsEffect(QGraphicsOpacityEffect(opacity=.5))
推荐阅读
- html - 在其他元素下隐藏部分移动文本
- bootstrap-4 - 我试图将导航链接保持在小屏幕上,它们在 900 像素处消失
- google-apps-script - 将映射脚本添加到我被添加到的谷歌工作表中,并在它在未共享的测试表上工作时出现错误
- python - 我想用 Discord.py 向 MusicBOT 添加队列功能
- java - 异步获取数据,然后用 RxJava 串行处理数据
- ansible - 使用 ansible 顺序赋值
- amazon-web-services - 尝试放置数据时出现 AWS lambda documentClient.put 错误
- vue.js - 增加 Vue.js 中组件数量的性能成本
- php - Docusign Api - 使用复合模板时文档不会更改
- c# - 什么是“真实”?