Как создать модальное окно в PyQt5?
Как мне создать второе окно, всплывающее по нажатию кнопки, установленной в главном окне?
После нажатия на кнопку, окно Modal появляется и тут же закрывается.
Если убрать комментарии, приложение перестанет работать вообще.
Что мне необходимо добавить в свой код, что окно не закрывалось и являлось модальным?
Пример, как пытался сделать я:
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget
import sys
class Main(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.resize(500, 500)
self.widget = QWidget()
self.testBtn = QtWidgets.QPushButton(self.widget)
self.testBtn.setText("Test")
self.testBtn.clicked.connect(self.open)
self.vbox = QtWidgets.QVBoxLayout()
self.vbox.addWidget(self.widget)
self.setLayout(self.vbox)
def open(self):
app2 = Modal()
app2.show()
class Modal(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# self.setWindowModality(Qt.WindowModal)
# self.setModal(True)
self.resize(200, 200)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
application = Main()
application.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Ваш объект app2 удаляется сборщиком мусора, надо продлить ему жизнь, т.е. сделать атрибутом класса.
...
def open(self):
self.app2 = Modal() # +++ self
self.app2.show() # +++ self
...