【问题标题】:How do I handle detect logout/shutdown with PyQt4 from a closeEvent?如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?
【发布时间】:2014-02-27 15:05:05
【问题描述】:

我想在用户注销或关闭我的应用程序时进行处理,但我遇到了麻烦,因为当 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()

【问题讨论】:

    标签: python qt python-2.7 pyqt pyqt4


    【解决方案1】:

    好吧,我想我当时至少浪费了 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 中干净地处理注销。

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多