我目前正在学习如何使用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_())


感谢您的建议!

最佳答案

当您单击按钮时,程序将调用您的函数,但具有不同的event对象,而该对象没有accept()ignore(),因此您会收到错误消息,并且程序以退出代码1结尾。

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

quit.triggered.connect(self.close)

关于python - PyQt5 closeEvent方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40622095/

10-09 06:47