Страницы

Поиск по вопросам

среда, 12 июня 2019 г.

Запрет закрытия главного окна в pyqt?

Всем привет! Как в 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_())

Комментариев нет:

Отправить комментарий