我想重新启动我的应用程序,但是我遵循了教程并添加了系统托盘图标。每次重新启动应用程序时,系统托盘都不会消失,我发现该应用程序由于某种原因并未真正重新启动。
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
每次重新启动应用程序时,以前的系统托盘始终存在,就像启动另一个进程一样,我想要唯一的进程并且不消耗任何资源。
答案 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