В настоящее время я изучаю, как создать приложение с pyqt5, и столкнулся с некоторой проблемой с методом closeEvent, переопределив, поэтому пользователю будет предложено подтвердить объект QMessageBox. Кажется, что хорошо работает с кнопкой X - событие становится «принятым», когда действие подтверждено и «отменено», когда нажата кнопка отмены. Однако, когда я использую кнопку «Выход» из раскрывающегося меню «Файл», независимо от того, какую кнопку я нажимаю, программа закрывается с кодом выхода 1. Кажется странным, потому что я использую тот же метод closeEvent в обоих случаях.PyQt5 closeEvent метод
import sys
from PyQt5.QtWidgets import QApplication, QMessageBox, QMainWindow, QAction
class window(QMainWindow):
def __init__(self):
super().__init__()
def createUI(self):
self.setGeometry(500, 300, 700, 700)
self.setWindowTitle("window")
quit = QAction("Quit", self)
quit.triggered.connect(self.closeEvent)
menubar = self.menuBar()
fmenu = menubar.addMenu("File")
fmenu.addAction(quit)
def closeEvent(self, event):
close = QMessageBox()
close.setText("You sure?")
close.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
close = close.exec()
if close == QMessageBox.Yes:
event.accept()
else:
event.ignore()
main = QApplication(sys.argv)
window = window()
window.createUI()
window.show()
sys.exit(main.exec_())
Благодарим за предложения!
Вы запустили его в консоли/терминале? У вас есть сообщение об ошибке. 'AttributeError: объект 'bool' не имеет атрибута 'accept'' – furas
, когда вы нажимаете кнопку, а затем системный вызов вашей функции, но с другим объектом' event', который не имеет 'accept()' и 'ignore()', поэтому вы получаете сообщение об ошибке и программа заканчивается кодом выхода 1. – furas