Я использую Nvidia Jetson Nano с Linux для 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) для дочернего виджета, в главном окне появляется дыра (если в этом окне воспроизводится видео).
Как установить прозрачность для дочернего виджета? Заранее спасибо за ваши ответы!