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

jor*_*ter 2 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_()
Run Code Online (Sandbox Code Playgroud)

小智 5

尝试在创建QApplication后添加此项:

proc.setQuitOnLastWindowClosed(False)
Run Code Online (Sandbox Code Playgroud)

默认情况下是这样,因此关闭对话框后,eventloop将终止.