如何通过单个进程重新启动应用程序?

时间:2019-07-29 00:46:13

标签: python pyqt pyqt5

我想重新启动我的应用程序,但是我遵循了教程并添加了系统托盘图标。每次重新启动应用程序时,系统托盘都不会消失,我发现该应用程序由于某种原因并未真正重新启动。

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class MainWindow(QMainWindow):
    EXIT_CODE_REBOOT = 122
    def __init__(self):
        super().__init__()
        self.restart_button = QPushButton('restart')
        self.restart_button.clicked.connect(self.onRestart)

        self.setCentralWidget(self.restart_button)

        self.systray = QSystemTrayIcon(self)
        icon = self.style().standardIcon(QStyle.SP_TrashIcon)
        self.systray.setIcon(icon)
        self.systray.show()

    def onRestart(self, checked):
        QApplication.exit(self.EXIT_CODE_REBOOT)

if __name__ == '__main__':
    currentExitCode = MainWindow.EXIT_CODE_REBOOT
    while currentExitCode == MainWindow.EXIT_CODE_REBOOT:
        app = QApplication(sys.argv)
        mainwindow = MainWindow()
        mainwindow.show()
        currentExitCode = app.exec()
        app = None

每次重新启动应用程序时,以前的系统托盘始终存在,就像启动另一个进程一样,我想要唯一的进程并且不消耗任何资源。

1 个答案:

答案 0 :(得分:1)

我尝试了您的代码,并且在Linux上运行良好,但是在Windows上退出后,我也发现了有关持久图标的类似报告(like this)。

尽管在退出之前进行eval 应该足够好,但我认为从Qt一侧删除对象(而不是使用a='baz=quux' $a # => -bash: baz=quux: command not found eval "$a" # no output echo "$baz" # => quux )可能会更好:

value