关闭PyQt对话框是否终止父进程?(PyQt4 / Pyside)示例代码
我在做一个QSystemTrayIcon应用的时候遇到了一些问题。
我创建的任何对话框,只要把SystemTrayIcon设为父窗口或者祖父窗口,关闭这些对话框时,整个应用程序就会结束,尽管我已经重写了“拒绝”方法。
下面是一个简化的例子,没有图标。当你运行它的时候(我这里用的是Windows 7),你会在任务栏上看到一个空白的托盘图标。如果你左键点击它,会弹出一个空的对话框。点击对话框右上角的“X”关闭它时,整个python进程也会完全结束。
from PySide import QtGui, QtCore
class RestartDialog(QtGui.QDialog):
def __init__(self, parent):
super(RestartDialog, self).__init__()
def reject(self):
self.hide()
class SystemTrayIcon(QtGui.QSystemTrayIcon):
def __init__(self, parent=None):
QtGui.QSystemTrayIcon.__init__(self, parent)
self.activated.connect(self.click_trap)
def click_trap(self, value):
''' Left click tray function '''
if value == self.Trigger: #left click!
self.dialog = RestartDialog(self)
self.dialog.show()
def show(self):
QtGui.QSystemTrayIcon.show(self)
if __name__ == "__main__":
proc = QtGui.QApplication([])
APP = SystemTrayIcon()
APP.show()
proc.exec_()
1 个回答
5
在你创建好 QApplication 之后,试着加上这个:
proc.setQuitOnLastWindowClosed(False)
默认情况下,它是“真”的,所以当你关闭对话框时,你的事件循环会结束。