透明框架内的透明小部件pyqt5

transparent widgets inside transparent frame 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 组件将显示为透明,标签和其他组件也是如此。如何仅对我的 class MainFrame 应用透明度。

编辑:

这是我的(透明按钮和透明 QWidget): 这是我需要的(没有透明按钮和透明 QWidget): 非常感谢。

我相信你正在寻找这个:

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_()

,结果是这样的:

如果您只想获得一些透明度,您可能需要像 this example.

中那样重写 paintEvent