Всем привет!
Как в pyqt сделать так, чтоб окно не закрывалось при нажатии на крестик?
Спасибо.
Анонимный пользователь Изменен статус публикации
Есть два способа решить эту проблему. Первый — это выключить саму кнопку, передав в метод setWindowFlags()
соответствующий набор флагов:
# -*- encoding: utf-8 -*- import sys from PyQt5 import QtGui from PyQt5 import QtCore from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox) class App(QMainWindow): def __init__(self): super().__init__() self.title = u'Тест' self.left = 200 self.top = 200 self.width = 400 self.height = 140 self.initUI() def initUI(self): self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowCloseButtonHint) self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = App() sys.exit(app.exec_())
Второй — игнорировать событие закрытия окна:
# -*- encoding: utf-8 -*- import sys from PyQt5 import QtGui from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox) class App(QMainWindow): def __init__(self): super().__init__() self.title = u'Тест' self.left = 200 self.top = 200 self.width = 400 self.height = 140 self.initUI() self._closable = False def initUI(self): self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.button = QPushButton(u'Закрыть', self) self.button.clicked.connect(self.on_click) self.show() def closeEvent(self, evnt): if self._closable: super(App, self).closeEvent(evnt) else: evnt.ignore() @pyqtSlot() def on_click(self): self._closable = True self.close() if __name__ == '__main__': app = QApplication(sys.argv) ex = App() sys.exit(app.exec_())