Не работает код pyqt5 как надо
Здравствyйте, у меня есть код. В котором я хочу сделать функцию. При нажатии кнопки open1 добавляется в gridlayout виджет и фон заблюривается. Так же и со второй кнопкой, токо открывается уже другой виджет. Я хочу сделать так, что при нажатии open1 открывался виджет, в котором я смогу нажать ESC и он закроется и блур пропадет. Так же и со вторым окном. Но почему-то у меня в коде блур пропадает но виджет из gridlayout не закрывается. Как это можно исправить?
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Ui_MainWindow3(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(463, 140)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(80, 50, 301, 71))
self.label_3.setStyleSheet("background-color: rgb(255, 0, 4);")
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(190, 150, 75, 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.label_3.setText(_translate("MainWindow", "Red label"))
self.pushButton.setText(_translate("MainWindow", "Close"))
class ExampleApp3(QtWidgets.QMainWindow, Ui_MainWindow3):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.r)
def r(self):
self.close()
class Ui_MainWindow2(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(463, 140)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(80, 20, 301, 71))
self.label_2.setStyleSheet("background-color: rgb(57, 110, 255);")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(200, 100, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
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.label_2.setText(_translate("MainWindow", "Blue label"))
self.pushButton_2.setText(_translate("MainWindow", "Close"))
class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow2):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_2.clicked.connect(self.d)
def d(self):
self.close()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(463, 290)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(130, 140, 211, 51))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(90, 20, 301, 71))
self.label.setStyleSheet("background-color: rgb(128, 255, 10);")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(130, 200, 211, 51))
self.pushButton_2.setObjectName("pushButton_2")
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.pushButton.setText(_translate("MainWindow", "Open1"))
self.label.setText(_translate("MainWindow", "Green label"))
self.pushButton_2.setText(_translate("MainWindow", "Open2"))
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.un)
self.pushButton_2.clicked.connect(self.un2)
def un(self):
self.exampleApp = ExampleApp2()
self.exampleApp.pushButton_2.clicked.connect(self.clickedApp2)
countLayout = self.gridLayout.count()
for it in range(countLayout):
w = self.gridLayout.itemAt(0).widget()
self.gridLayout.removeWidget(w)
w.hide()
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.addWidget(self.exampleApp, 0, 0, 2, 1)
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(3)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(3)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(3)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(False)
self.pushButton_2.setEnabled(False)
self.effectFlag = True
self.update()
def un2(self):
self.exampleApp_3 = ExampleApp3()
self.exampleApp_3.pushButton.clicked.connect(self.clickedApp3)
countLayout = self.gridLayout.count()
for it in range(countLayout):
w = self.gridLayout.itemAt(0).widget()
self.gridLayout.removeWidget(w)
w.hide()
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.addWidget(self.exampleApp_3, 0, 0, 2, 1)
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(3)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(3)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(3)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(False)
self.pushButton_2.setEnabled(False)
self.effectFlag = True
self.update()
def clickedApp2(self):
self.exampleApp.close()
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(0)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(0)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(True)
self.pushButton_2.setEnabled(True)
self.effectFlag = False
self.update()
def clickedApp3(self):
self.exampleApp_3.close()
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(0)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(0)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(True)
self.pushButton_2.setEnabled(True)
self.effectFlag = False
self.update()
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape :
self.exampleApp = ExampleApp3()
self.exampleApp.close()
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(0)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(0)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(True)
self.pushButton_2.setEnabled(True)
self.effectFlag = False
self.update()
def keyPressEvent2(self, e):
if e.key() == Qt.Key_Escape :
self.exampleApp_3 = ExampleApp3()
self.exampleApp_3.close()
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(0)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(0)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(True)
self.pushButton_2.setEnabled(True)
self.effectFlag = False
self.update()
if __name__=="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
я не совсем понимаю, что у вас происходит. Поэтому не вникая в логику, я сделал некоторые исправления и отметил их. Проверьте - это то что вы хотели?
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Ui_MainWindow3(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(463, 140)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(80, 50, 301, 71))
self.label_3.setStyleSheet("background-color: rgb(255, 0, 4);")
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(190, 150, 75, 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.label_3.setText(_translate("MainWindow", "Red label"))
self.pushButton.setText(_translate("MainWindow", "Close"))
class ExampleApp3(QtWidgets.QMainWindow, Ui_MainWindow3):
def __init__(self):
super().__init__()
self.setupUi(self)
#? self.pushButton.clicked.connect(self.r)
#? def r(self):
#? self.close()
class Ui_MainWindow2(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(463, 140)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(80, 20, 301, 71))
self.label_2.setStyleSheet("background-color: rgb(57, 110, 255);")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(200, 100, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
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.label_2.setText(_translate("MainWindow", "Blue label"))
self.pushButton_2.setText(_translate("MainWindow", "Close"))
class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow2):
def __init__(self):
super().__init__()
self.setupUi(self)
#? self.pushButton_2.clicked.connect(self.d)
#? def d(self):
#? print("ExampleApp2 def d(self):")
#? self.close()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(463, 290)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(130, 140, 211, 51))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(90, 20, 301, 71))
self.label.setStyleSheet("background-color: rgb(128, 255, 10);")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(130, 200, 211, 51))
self.pushButton_2.setObjectName("pushButton_2")
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.pushButton.setText(_translate("MainWindow", "Open1"))
self.label.setText(_translate("MainWindow", "Green label"))
self.pushButton_2.setText(_translate("MainWindow", "Open2"))
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.un)
self.pushButton_2.clicked.connect(self.un2)
self.exampleApp_2, self.exampleApp_3 = None, None # +++
def un(self):
# ? self.exampleApp = ExampleApp2()
self.exampleApp_2 = ExampleApp2() # exampleApp_2
self.exampleApp_2.pushButton_2.clicked.connect(self.clickedApp2)
countLayout = self.gridLayout.count()
for it in range(countLayout):
w = self.gridLayout.itemAt(0).widget()
self.gridLayout.removeWidget(w)
w.hide()
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.addWidget(self.exampleApp_2, 0, 0, 2, 1)
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(3)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(3)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(3)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(False)
self.pushButton_2.setEnabled(False)
self.effectFlag = True
self.update()
def un2(self):
self.exampleApp_3 = ExampleApp3()
self.exampleApp_3.pushButton.clicked.connect(self.clickedApp3)
countLayout = self.gridLayout.count()
for it in range(countLayout):
w = self.gridLayout.itemAt(0).widget()
self.gridLayout.removeWidget(w)
w.hide()
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.addWidget(self.exampleApp_3, 0, 0, 2, 1)
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(3)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(3)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(3)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(False)
self.pushButton_2.setEnabled(False)
self.effectFlag = True
self.update()
def clickedApp2(self):
self.exampleApp_2.close()
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(0)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(0)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(True)
self.pushButton_2.setEnabled(True)
self.effectFlag = False
self.update()
def clickedApp3(self):
self.exampleApp_3.close()
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(0)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(0)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(True)
self.pushButton_2.setEnabled(True)
self.effectFlag = False
self.update()
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape :
if self.exampleApp_2: self.clickedApp2() # +++
if self.exampleApp_3: self.clickedApp3() # +++
'''
self.exampleApp = ExampleApp3()
self.exampleApp.close()
self.effect = QtWidgets.QGraphicsBlurEffect()
self.effect.setBlurRadius(0)
self.pushButton.setGraphicsEffect(self.effect)
self.effect2 = QtWidgets.QGraphicsBlurEffect()
self.effect2.setBlurRadius(0)
self.label.setGraphicsEffect(self.effect2)
self.effect3 = QtWidgets.QGraphicsBlurEffect()
self.effect3.setBlurRadius(0)
self.pushButton_2.setGraphicsEffect(self.effect3)
self.pushButton.setEnabled(True)
self.pushButton_2.setEnabled(True)
self.effectFlag = False
self.update()
'''
if __name__=="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
sys.exit(app.exec_())