私は単純なアプリケーションを開発しようとしている PyQt のまったくの初心者です。Qt-designer でシンプルな UI をデザインしました。[X] または [終了] ボタンをクリックするか、メニューから [終了] を選択したときに、ユーザーが本当にアプリケーションを終了するかどうか、追加の確認が必要です。
コードは次のとおりです。
import sys
from PyQt4 import QtGui, QtCore, uic
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui = uic.loadUi('main_window.ui')
self.ui.show()
self.ui.btnExit.clicked.connect(self.close)
self.ui.actionExit.triggered.connect(self.close)
def closeEvent(self, event):
print("event")
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
def main():
app = QtGui.QApplication(sys.argv)
win = MainWindow()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
問題はそれです:
- メイン ウィンドウで [X] をクリックしても、closeEvent 関数がトリガーされない
- [終了] ボタンをクリックするか、メニューから [終了] を選択すると、関数
が呼び出されますが、[はい] をクリックしてもアプリケーションが閉じません。
SOに関するいくつかの質問を見つけてチュートリアルを検索しましたが、そのような問題をカバーするものはありませんでした。私は何を間違っていますか?