首页 > 解决方案 > 将 QGraphicBlurEffect 设置为 QStackWidget 而不影响其中的小部件

问题描述

我正在尝试将模糊设置为 QStackWidget 的背景。主窗口设置为透明,堆栈小部件使用样式表设置为半透明。当我尝试模糊堆栈小部件时,它会模糊其中的所有内容。如何仅模糊堆栈小部件背景而不模糊其中的小部件?

import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *

li = ["item1", "item2"]


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.resize(500, 400)

        self.label = QLabel("Noting to see here")

        self.tab1 = QLabel("You can't see me")
        self.tab1.setAlignment(Qt.AlignCenter)
        self.tab2 = QLabel("Now you can")
        self.tab2.setAlignment(Qt.AlignCenter)
        self.tab3 = QLabel("Now you don't")
        self.tab3.setAlignment(Qt.AlignCenter)

        self.tabWidget = QTabWidget()
        self.tabWidget.addTab(self.tab1, "t1")
        self.tabWidget.addTab(self.tab2, "t2")
        self.tabWidget.addTab(self.tab3, "t2")
        self.tabWidget.setTabPosition(QTabWidget.West)

        self.Blur = QGraphicsBlurEffect()
        self.tabWidget.tabBar().setGraphicsEffect(self.Blur)

        self.tabWidget.setStyleSheet("QTabWidget{background: none;"
                                     "border:  0px;"
                                     "margin: 0px;"
                                     "padding: 0px;}"
                                     "QTabBar:tab{background: rgba(0, 200, 220, 20);}"
                                     "QTabBar:tab:hover{background: rgba(200, 200, 200, 120);}"
                                     "QTabBar:tab:selected{background: rgb(0, 150, 220);}")

        self.sw = QStackedWidget()
        self.sw.addWidget(self.label)
        self.sw.addWidget(self.tabWidget)
        self.sw.setStyleSheet("background: rgba(255, 255, 255, 10);")

        if li is None:
            self.sw.setCurrentWidget(self.label)

        else:
            self.sw.setCurrentWidget(self.tabWidget)

        self.toolBar = QToolBar()
        self.toolBar.setFixedHeight(30)
        self.toolBar.setStyleSheet("background: grey;")

        self.layout = QVBoxLayout()
        self.layout.setSpacing(0)
        self.layout.setMargin(0)
        self.layout.addWidget(self.toolBar)
        self.layout.addWidget(self.sw)
        self.setLayout(self.layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

简而言之,我想要图像中的模糊。

模糊背景

图片

标签: python-3.xpyqt5pyside2

解决方案


推荐阅读