如何使用closeEvent中的PyQt4处理检测注销/关闭?

时间:2014-02-27 15:05:06

标签: python qt python-2.7 pyqt pyqt4

我想在用户注销或关闭我的应用程序时进行处理,但是我遇到了麻烦,因为当MainWindow关闭时,我的应用程序最小化到托盘。当我注销时,会调用closeEvent,但我无法判断它是来自尝试退出的操作系统还是按下'x'(关闭)按钮的用户。

只有当它是操作系统时,我才想关闭我的连接并实际终止应用程序。不幸的是,closeEvent在任何其他函数之前被调用。在下面的示例中,只有在您event.ignore()发表评论时才会调用commitDataaboutToQuit

任何帮助将不胜感激:)

http://pyqt.sourceforge.net/Docs/PyQt4/qapplication.html#commitData

http://pyqt.sourceforge.net/Docs/PyQt4/qcoreapplication.html#aboutToQuit

http://qt-project.org/doc/qt-4.8/qapplication.html#details

import sys
from PyQt4 import QtGui


class myWidget(QtGui.QWidget):
    def closeEvent(self, event):
        print "CLOSING"
        event.ignore()


class myApp(QtGui.QApplication):
    def __init__(self, argv):
        QtGui.QApplication.__init__(self, argv)
        print "CREATED"

    def commitData(self, session_manager):
        print "COMMITTING"


def cd(session_manager):
    print "ALSO CMOMMITTING"


def about_to_quit():
    print "QUITTING"


def main():
    app = myApp(sys.argv)
    app.aboutToQuit.connect(about_to_quit)
    w = myWidget()
    w.resize(250, 150)
    w.setWindowTitle('Simple')
    w.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:2)

好吧,我想我至少浪费了5个小时。我在Windows中尝试过,它工作正常。然后我做了一些网络搜索并遇到了这些错误:

https://bugreports.qt-project.org/browse/QTBUG-10280(Qt4)

https://bugreports.qt-project.org/browse/QTBUG-33034(Qt5)

documentation表示它可以在OSX中运行!!

所以ATM不可能通过'x'(关闭)按钮在后台运行应用程序,并且干净地处理osx中的注销。