PyQt:在QMessageBox

时间:2017-05-21 16:20:43

标签: python python-3.x pyqt pyqt5 taskbar

我有一个主要基于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。

1 个答案:

答案 0 :(得分:3)

问题是当所有Windows关闭时Qt退出。只需禁用它:

app.setQuitOnLastWindowClosed(False)

main()