Python PyQt:在QMessageBox之后退出QSystemTrayIcon程序

Python PyQt:在QMessageBox之后退出QSystemTrayIcon程序,python,python-3.x,pyqt,pyqt5,taskbar,Python,Python 3.x,Pyqt,Pyqt5,Taskbar,我有一个主要基于QSystemTrayIcon的简单脚本。所有东西都可以找到,右键单击任务栏图标上有一个退出程序的选项。我想添加一个QMessageBox,选择“是”后,退出程序;否则,什么也不做 我对这一切都很熟悉,但它没有发挥应有的作用,因此产生了这个问题。我创建了一个简单的示例来演示问题: import sys from PyQt5 import QtCore, QtGui, QtWidgets class SystemTrayIcon(QtWidgets.QSystemTrayIco

我有一个主要基于
QSystemTrayIcon
的简单脚本。所有东西都可以找到,右键单击任务栏图标上有一个退出程序的选项。我想添加一个
QMessageBox
,选择“是”后,退出程序;否则,什么也不做

我对这一切都很熟悉,但它没有发挥应有的作用,因此产生了这个问题。我创建了一个简单的示例来演示问题:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class SystemTrayIcon(QtWidgets.QSystemTrayIcon):
    def __init__(self, icon, parent=None):
        QtWidgets.QSystemTrayIcon.__init__(self, icon, parent)
        self.menu = QtWidgets.QMenu(parent)
        self.exit_action = self.menu.addAction("Exit")
        self.setContextMenu(self.menu)
        self.exit_action.triggered.connect(self.slot_exit)

        self.msg_parent = QtWidgets.QWidget()

    def slot_exit(self):
        reply = QtWidgets.QMessageBox.question(self.msg_parent, "Confirm exit",
                                               "Are you sure you want to exit Persistent Launcher?",
                                               QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
        # if reply == QtWidgets.QMessageBox.Yes:
        #     QtCore.QCoreApplication.exit(0)


def main():
    app = QtWidgets.QApplication(sys.argv)

    tray_icon = SystemTrayIcon(QtGui.QIcon("TheIcon.png"))

    tray_icon.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
现在您可以看到,在
slot_exit()
函数中,无论我选择是还是否,程序都会退出(代码为0,没有错误)。注释部分是我期望用于根据选择确定操作的部分。你能帮我弄清楚为什么会发生这种行为吗?只有在“是”的情况下,什么才是正确的退出方式


我使用的是Windows 10、64位和Python Anaconda 3.5.2 32位以及PyQt 5.7。

问题是所有窗口关闭时,Qt都会退出。只需通过以下方式禁用该功能:

app.setQuitOnLastWindowClosed(False)

在你的
main()

中,竟然没有人看到这个!“我可以重现这个问题。”量子物理学家说,“我不愿意称它为bug,但它听起来像bug。”。为什么它只需回答QMessageBox就可以退出?就是这样!谢谢在找到这个之前花了3天时间。我想我的思路错了。救了我一天。我不知道为什么这个问题和答案得不到重视。