PyQt5 关闭事件方法

新手上路,请多包涵

我目前正在学习如何使用 pyqt5 构建应用程序,并遇到了 closeEvent 方法的一些问题,该方法被覆盖,因此 QMessageBox 对象要求用户进行确认。它似乎适用于 X 按钮 - 当操作被确认时事件被“接受”,当取消按钮被点击时事件被“取消”。但是,当我使用下拉文件菜单中的退出按钮时,无论我单击哪个按钮,程序都会以退出代码 1 关闭。看起来很奇怪,因为我在两种情况下都使用相同的 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_())

感谢您的建议!

原文由 Hugh Mongous 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

当您单击按钮时,程序将调用您的函数,但使用不同的 event 对象,该对象没有 accept()ignore() 退出程序并以错误消息结束–代码 1。

您可以分配 self.close 程序将使用正确的事件对象调用 closeEvent()

 quit.triggered.connect(self.close)

原文由 furas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题