为什么PySide在文件对话框后退出?

时间:2015-01-13 15:34:49

标签: python macos qt pyside

我正在编写一个简单的托盘图标应用程序。 但是在向菜单操作添加文件对话框后,整个应用程序退出。

如果我在Mac上运行代码,它会打印文件名,因此它不会彻底崩溃。 如果我用字符串替换getOpenFileName的调用,它将继续运行。

import sys
from PySide import QtCore, QtGui

def share():
    (filename, _) = QtGui.QFileDialog.getOpenFileName()
    print(filename)

app = QtGui.QApplication(sys.argv)

icon = QtGui.QSystemTrayIcon(QtGui.QIcon('images/glyphicons-206-electricity.png'), app)

menu = QtGui.QMenu()
menu.addAction(QtGui.QAction("Share...", menu, triggered=share))
menu.addAction(QtGui.QAction("Quit", menu, triggered=app.quit))


icon.setContextMenu(menu)
icon.show()

app.exec_()

我使用的是Mac OS X 10.10.1,Python 3.4.2,Qt 4.8.6和PySide 1.2.2

1 个答案:

答案 0 :(得分:3)

默认情况下,Qt应用程序在最后一个窗口关闭时隐式退出。为防止这种情况发生,您可以在setQuitOnLastWindowClosed中使用QGuiApplication

app = QtGui.QApplication(sys.argv)
app.setQuitOnLastWindowClosed(false)