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