关闭PyQt Dialog终止父进程? (PyQt4 / Pyside)带有示例代码

时间:2014-04-14 21:33:24

标签: python windows 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 个答案:

答案 0 :(得分:5)

尝试在创建QApplication后添加此内容:

proc.setQuitOnLastWindowClosed(False)

默认情况下为true,因此关闭对话框后,您的eventloop将会终止。