Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用PyQt4从closeEvent处理检测注销/关机?_Python_Qt_Python 2.7_Pyqt_Pyqt4 - Fatal编程技术网

Python 如何使用PyQt4从closeEvent处理检测注销/关机?

Python 如何使用PyQt4从closeEvent处理检测注销/关机?,python,qt,python-2.7,pyqt,pyqt4,Python,Qt,Python 2.7,Pyqt,Pyqt4,我想处理用户何时注销或关闭我的应用程序,但我遇到了麻烦,因为当主窗口关闭时,我的应用程序最小化到托盘。当我注销时,会调用closeEvent,但我无法判断它是来自试图退出的操作系统还是来自按下“x”(关闭)按钮的用户 只有当它是操作系统时,我才想关闭连接并实际终止应用程序。不幸的是,closeEvent在调用任何其他函数之前被调用。在下面的示例中,只有在注释掉event.ignore()时才会调用commitData或aboutToQuit 任何帮助都将不胜感激:) 我想我在这上面至少浪费

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

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

任何帮助都将不胜感激:)


我想我在这上面至少浪费了5个小时。我在窗户上试过,效果很好。然后我又进行了一些网络搜索,发现了以下漏洞:

(Qt4)

(Qt5)

但是他们说它可以在OSX中工作

因此,不可能通过“x”(关闭)按钮在后台运行应用程序,并在osx中干净地处理注销

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()