我在Linux for Tegra(Ubuntu18,X11窗口系统)、Python3.6和PyQt5上使用Nvidia Jetson Nano。我想在主窗口小部件上放置一个透明窗口小部件(或具有透明背景)
当这些小部件作为独立部件创建时,所有内容都会正确显示。即使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),主窗口中会出现一个“洞”(如果在此窗口中播放视频)
如何为儿童小部件设置透明度?提前感谢您的回答
据我所知,小部件的透明度(背景透明度)只能使用桌面合成器创建。Qt无法使用桌面合成器呈现子窗口小部件。唯一的解决方案是使用独立的窗口/小部件。唯一的解决方案是使用独立的窗口/小部件
顾名思义,
windowOpacity
指的是窗口的不透明度如果要设置子窗口小部件的不透明度,需要使用QGraphicsOpacityEffect:
相关问题 更多 >
编程相关推荐