Размытие главного окна после открытия видежета pyqt5
У меня есть в код, в котором после нажатия на кнопку Выбрать цвет открывается виджет, который находиться в gridlayout.
Надо сделать так, чтоб при открытии виджета, после нажатия на кнопку Выбрать цвет все главное окно должно размыться(gaussian blur), а после закрытия виджета выбора цвета все должно возвращаться.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(695, 414)
MainWindow.setMinimumSize(QtCore.QSize(695, 414))
MainWindow.setMaximumSize(QtCore.QSize(695, 414))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 701, 421))
self.label.setStyleSheet("background-color: rgb(121, 121, 121);")
self.label.setText("")
self.label.setObjectName("label")
self.fontComboBox = QtWidgets.QFontComboBox(self.centralwidget)
self.fontComboBox.setGeometry(QtCore.QRect(20, 30, 192, 21))
self.fontComboBox.setEditable(False)
self.fontComboBox.setObjectName("fontComboBox")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 380, 91, 23))
self.pushButton.setObjectName("pushButton")
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setGeometry(QtCore.QRect(20, 70, 651, 291))
self.plainTextEdit.setObjectName("plainTextEdit")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(230, 30, 161, 20))
self.lineEdit.setObjectName("lineEdit")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.fontComboBox.setCurrentText(_translate("MainWindow", "MS Shell Dlg 2"))
self.pushButton.setText(_translate("MainWindow", "Выбрать цвет"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Найти..."))
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.onClicked)
def onClicked(self):
self.exampleApp2 = ExampleApp2()
self.gridLayout.addWidget(self.exampleApp2, 0, 0, 1, 1)
class Ui_MainWindow_color(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(277, 323)
MainWindow.setMinimumSize(QtCore.QSize(277, 323))
MainWindow.setMaximumSize(QtCore.QSize(277, 323))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 701, 421))
self.label.setStyleSheet("background-color: green")
self.label.setText("")
self.label.setObjectName("label")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(20, 20, 231, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(170, 290, 81, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.comboBox.setItemText(0, _translate("MainWindow", "Green"))
self.comboBox.setItemText(1, _translate("MainWindow", "White"))
self.comboBox.setItemText(2, _translate("MainWindow", "Black"))
self.comboBox.setItemText(3, _translate("MainWindow", "Purple"))
self.comboBox.setItemText(4, _translate("MainWindow", "Red"))
self.comboBox.setItemText(5, _translate("MainWindow", "Yellow"))
self.comboBox.setItemText(6, _translate("MainWindow", "Orange"))
self.pushButton.setText(_translate("MainWindow", "Продолжить"))
class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow_color):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.clicked)
def clicked(self):
self.close()
if __name__=="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Класс QGraphicsBlurEffect обеспечивает эффект размытия.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow_color(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(277, 323)
MainWindow.setMinimumSize(QtCore.QSize(277, 323))
MainWindow.setMaximumSize(QtCore.QSize(277, 323))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 701, 421))
self.label.setStyleSheet("background-color: green")
self.label.setText("")
self.label.setObjectName("label")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(20, 20, 231, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(170, 290, 81, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.comboBox.setItemText(0, _translate("MainWindow", "Green"))
self.comboBox.setItemText(1, _translate("MainWindow", "White"))
self.comboBox.setItemText(2, _translate("MainWindow", "Black"))
self.comboBox.setItemText(3, _translate("MainWindow", "Purple"))
self.comboBox.setItemText(4, _translate("MainWindow", "Red"))
self.comboBox.setItemText(5, _translate("MainWindow", "Yellow"))
self.comboBox.setItemText(6, _translate("MainWindow", "Orange"))
self.pushButton.setText(_translate("MainWindow", "Продолжить"))
class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow_color):
def __init__(self):
super().__init__()
self.setupUi(self)
# self.pushButton.clicked.connect(self.clicked)
# def clicked(self):
# self.close()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(695, 414)
MainWindow.setMinimumSize(QtCore.QSize(695, 414))
MainWindow.setMaximumSize(QtCore.QSize(695, 414))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 701, 421))
# self.label.setStyleSheet("background-color: rgb(121, 121, 121);") # --- !!!
self.label.setText("")
self.label.setObjectName("label")
self.fontComboBox = QtWidgets.QFontComboBox(self.centralwidget)
self.fontComboBox.setGeometry(QtCore.QRect(20, 30, 192, 21))
self.fontComboBox.setEditable(False)
self.fontComboBox.setObjectName("fontComboBox")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 380, 91, 23))
self.pushButton.setObjectName("pushButton")
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setGeometry(QtCore.QRect(20, 70, 651, 291))
self.plainTextEdit.setObjectName("plainTextEdit")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(230, 30, 161, 20))
self.lineEdit.setObjectName("lineEdit")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.fontComboBox.setCurrentText(_translate("MainWindow", "MS Shell Dlg 2"))
self.pushButton.setText(_translate("MainWindow", "Выбрать цвет"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Найти..."))
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.plainTextEdit.setFont(QtGui.QFont('Arial', 15))
self.plainTextEdit.setPlainText('Hello World !')
self.effectFlag = False
self.pushButton.clicked.connect(self.onClicked)
def onClicked(self):
self.exampleApp2 = ExampleApp2()
self.gridLayout.addWidget(self.exampleApp2, 0, 0, 1, 1)
self.exampleApp2.pushButton.clicked.connect(self.clickedApp2)
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(3)
self.plainTextEdit.setGraphicsEffect(self.effect)
self.plainTextEdit.setStyleSheet('background-color: rgba(121, 252, 50, 200);')
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(2)
self.pushButton.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(2)
self.fontComboBox.setGraphicsEffect(self.effect3)
self.effect4 = QtWidgets.QGraphicsBlurEffect()
self.effect4.setBlurRadius(2)
self.lineEdit.setGraphicsEffect(self.effect4)
self.fontComboBox.setEnabled(False)
self.pushButton.setEnabled(False)
self.plainTextEdit.setEnabled(False)
self.lineEdit.setEnabled(False)
self.effectFlag = True
self.update()
def clickedApp2(self): # +++
self.effect.setBlurRadius(0)
self.plainTextEdit.setGraphicsEffect(self.effect)
self.plainTextEdit.setStyleSheet('background-color: #fff;')
self.effect2.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect2)
self.effect3.setBlurRadius(0)
self.fontComboBox.setGraphicsEffect(self.effect3)
self.effect4.setBlurRadius(0)
self.lineEdit.setGraphicsEffect(self.effect4)
self.effectFlag = False
self.update()
self.exampleApp2.close()
self.fontComboBox.setEnabled(True)
self.pushButton.setEnabled(True)
self.plainTextEdit.setEnabled(True)
self.lineEdit.setEnabled(True)
def paintEvent(self, event): # +++
if self.effectFlag:
painter = QtGui.QPainter(self)
brush = QtGui.QBrush(QtCore.Qt.SolidPattern)
brush.setColor(QtGui.QColor(121, 252, 50, 200))
painter.setBrush(brush)
painter.drawRect(self.rect())
else:
painter = QtGui.QPainter(self)
brush = QtGui.QBrush(QtCore.Qt.SolidPattern)
brush.setColor(QtGui.QColor(121, 121, 121, 220))
painter.setBrush(brush)
painter.drawRect(self.rect())
if __name__=="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle('Fusion') # можете попробовать без этой строки
window = ExampleApp()
window.show()
sys.exit(app.exec_())
