如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?
Posted
技术标签:
【中文标题】如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?【英文标题】:How do I handle detect logout/shutdown with PyQt4 from a closeEvent? 【发布时间】:2014-02-27 15:05:05 【问题描述】:我想在用户注销或关闭我的应用程序时进行处理,但我遇到了麻烦,因为当 MainWindow 关闭时我的应用程序最小化到托盘。当我注销时, closeEvent 被调用,但我不知道它是来自试图退出的操作系统还是按下“x”(关闭)按钮的用户。
只有当它是操作系统时,我才会想要关闭我的连接并实际终止应用程序。不幸的是,closeEvent 在任何其他函数之前被调用。在下面的示例中,只有注释掉 event.ignore()
才会调用 commitData
或 aboutToQuit
。
任何帮助将不胜感激:)
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】:好吧,我想我当时至少浪费了 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 中干净地处理注销。
【讨论】:
以上是关于如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?的主要内容,如果未能解决你的问题,请参考以下文章