关闭PyQt对话框是否终止父进程?(PyQt4 / Pyside)示例代码

2 投票
1 回答
856 浏览
提问于 2025-04-18 02:44

我在做一个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)

默认情况下,它是“真”的,所以当你关闭对话框时,你的事件循环会结束。

撰写回答