1

我有这个控制我的守护进程的应用程序。它基本上检查守护进程是否已经在运行,如果是,它提供关闭选项,如果没有,它提供关闭选项,它还为您提供它的日志,并且所有内容都在从 QSystemTrayIcon 打开的菜单上。当我运行它时,它工作得很好,但是当我将它设置为在我登录后自动运行时,它运行,但是托盘图标没有显示,你甚至可以用“ps aux”看到这个过程。我在 Ubuntu 12.04 上运行。

    #!/usr/bin/env python

    import sys
    from PyQt4 import QtGui
    from PyQt4 import QtCore
    from subprocess import call
    from subprocess import Popen
    import os
    import time

类 SystemTrayIcon(QtGui.QSystemTrayIcon):

def __init__(self, parent=None):
    QtGui.QSystemTrayIcon.__init__(self, parent)
    self.setIcon(QtGui.QIcon("./mail_open_process.png"))

    global closeAction
    global openAction
    global startOnLaunch

    self.menu = QtGui.QMenu(parent)
    openAction = self.menu.addAction("Open")
    closeAction = self.menu.addAction("Close")
    logAction = self.menu.addAction("Log")
    startOnLaunch = self.menu.addAction("Start on Launch")
    startOnLaunch.setCheckable(True)
    exitAction = self.menu.addAction("Exit")
    self.setContextMenu(self.menu)


    self.connect(openAction,QtCore.SIGNAL('triggered()'),self.openDaemon)
    self.connect(closeAction,QtCore.SIGNAL('triggered()'),self.closeDaemon)
    self.connect(logAction,QtCore.SIGNAL('triggered()'),self.openLog)
    self.connect(exitAction,QtCore.SIGNAL('triggered()'),self.Exit)
    #self.connect(startOnLaunch,QtCore.SIGNAL('triggered()'),self.startLaunch)


    if os.path.exists("/dev/repa"):
        closeAction.setVisible(True)
        openAction.setVisible(False)
    else:
        closeAction.setVisible(False)
        openAction.setVisible(True)


def Exit(self):
    os.remove("/tmp/daemonMenu.pid")
    sys.exit()

def openDaemon(self):
    call(["gksu", os.path.expandvars("$HOME")+"/repad/apps/repad -f"])
    time.sleep(1)
    if os.path.exists("/dev/repa"):
        closeAction.setVisible(True)
        openAction.setVisible(False)


def closeDaemon(self):
    call(["gksu", os.path.expandvars("$HOME")+"/repad/apps/repad -c"])
    time.sleep(1)
    if not os.path.exists("/dev/repa"):
        closeAction.setVisible(False)
        openAction.setVisible(True)

def openLog(self):
    Popen(["gedit", "/dev/repad.log"])

#def startLaunch(self):
 #   Dir = "/etc/init.d/S99scriptDaemon" 
  #  if startOnLaunch.isChecked():
   #         call(["gksu","cp ./S99scriptDaemon /etc/rc5.d"])
    #if not startOnLaunch.isChecked():
     #       call (["gksu","rm /etc/rc5.d/S99scriptDaemon"])

定义主():

pid = str(os.getpid())
pidDir = "/tmp/daemonMenu.pid"
if os.path.isfile(pidDir):
    pidFile = open(pidDir,"r")
    pidLine = pidFile.readline()
    call(["kill", "%s" %(pidLine)])
    os.remove(pidDir)
file(pidDir, 'w+').write(pid)

如果名称== '主要':

main()
app = QtGui.QApplication(sys.argv)
trayIcon = SystemTrayIcon()
trayIcon.show()

sys.exit(app.exec_())
4

1 回答 1

0

我有同样的问题。我制作了脚本 start.sh 并在启动时系统启动了这个脚本。在脚本中,我在启动应用程序之前添加了 10 秒延迟。这个脚本看起来像这样:

sleep 10
./main.py
于 2013-08-16T20:08:23.917 回答