прозрачные виджеты внутри прозрачной рамки pyqt5

У меня проблема с решением проблемы для моей программы. Когда я создаю прозрачный виджет, который содержит некоторые другие виджеты, они тоже становятся прозрачными, и я не понимаю, почему.

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt

class MainFrame(QtWidgets.QWidget):

    def __init__(self, parent=None):
        super(MainFrame, self).__init__(parent)

        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setFixedSize(860, 560)

        # Set the opacity
        self.setWindowOpacity(1 - 50 / 100)

        layout = QtWidgets.QHBoxLayout(self)

        layout.addWidget(QtWidgets.QPushButton("TEST"))

В этом примере кода виджет QPushButton будет выглядеть прозрачным, то же самое с метками и другими виджетами. Как применить прозрачность ТОЛЬКО к моему классу MainFrame.

Редактировать :

вот что у меня есть (прозрачная кнопка и прозрачный QWidget):вот что мне нужно (НЕТ прозрачной кнопки и прозрачного QWidget):Большое спасибо.

Ответы на вопрос(1)

Решение Вопроса

self.setAttribute(Qt.WA_TranslucentBackground)

Полный код, адаптированный из вашего примера:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt

class MainFrame(QtWidgets.QWidget):

    def __init__(self, parent=None):
        super(MainFrame, self).__init__(parent)

        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setFixedSize(860, 560)

        # Set the opacity
        #self.setWindowOpacity(1 - 50 / 100)

        layout = QtWidgets.QHBoxLayout(self)

        layout.addWidget(QtWidgets.QPushButton("TEST"))

        self.setAttribute(Qt.WA_TranslucentBackground)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    Frame = MainFrame(None)
    Frame.show()
    app.exec_()

и результат таков:

Если вы хотите иметь только некоторую прозрачность, вам может понадобиться переписатьpaintEvent как вэтот пример.

 SyedElec31 мая 2016 г., 20:21
Вы совершенно правы! Я не пробовал, большое спасибо.
 armatita31 мая 2016 г., 20:15
@Darkos Как я сказал в конце своего ответа: если вам нужна частичная прозрачность, вам нужно повторно реализовать paintEvent. То, как вы должны это сделать, находится по ссылке внизу.
 SyedElec31 мая 2016 г., 20:12
Привет, спасибо, но это не совсем то, что мне нужно, мне все еще нужен прозрачный виджет (не полностью прозрачный). Я отредактировал свой вопрос.

Ваш ответ на вопрос