Using QSystemTrayIcon with PyQt

Alex Teiche xelapond at gmail.com
Mon Mar 31 21:41:37 EDT 2008


On Mar 31, 6:40 pm, Alex Teiche <xelap... at gmail.com> wrote:
> On Mar 31, 11:49 am, Alex Teiche <xelap... at gmail.com> wrote:
>
>
>
> > On Mar 30, 3:50 pm, Benjamin <musiccomposit... at gmail.com> wrote:
>
> > > On Mar 29, 11:02 pm, Alex Teiche <xelap... at gmail.com> wrote:> Hello,
>
> > > > I am pretty new to Python, and have never learned C++.  I am trying to
> > > > implement the following thing into my python application:
>
> > > >http://doc.trolltech.com/4.3/qsystemtrayicon.html
>
> > > > Through PyQt.  I have been using PyQt for awhile and I know how do use
> > > > it, but I could not get this specific thing to work.  Can someone give
> > > > me some hints as to get it working in Python?
>
> > > What problems are you having?
>
> > > > Thanks a ton,
>
> > > > Alex
>
> > Thanks everyone for your help.  I found the example to be particularly
> > helpful, and I have made a simplified version just to display an icon
> > with a quit button in its menu.  Once I know how to do that I will
> > incorporate it into my larger program, with more options and the
> > ability show messages.  The problem is, it doesn't work, and I can't
> > find out what's wrong.  Can you give me some hints?
>
> > Here is the code:
> > import sys
> > from PyQt4 import QtGui, QtCore
>
> > class trayIcon(QtGui.QWidget):
> >     def __init__(self, parent=None):
> >         QtGui.QWidget.__init__(self, parent)
>
> >         #********Create Actions for the Tray Menu********#
> >         self.quitAction = QtGui.QAction(self.tr("&Quit"), self)
> >         QtCore.QObject.connect(self.quitAction,
> > QtCore.SIGNAL("triggered()"), QtGui.qApp, QtCore.SLOT("quit()"))
>
> >         create_tray_icon()
>
> >         self.composeAction.setEnabled(visible)
> >         QtGui.QWidget.setVisible(self, visible)
>
> >         self.trayIcon.show()
>
> >     def create_tray_icon(self):
> >          self.trayIconMenu = QtGui.QMenu(self)
> >          self.trayIconMenu.addAction(self.composeAction)
> >          self.trayIcon = QtGui.QSystemTrayIcon(self)
> >          self.trayIcon.setContextMenu(self.trayIconMenu)
> >          self.trayIcon.setIcon(bad.svg)
>
> > app = QtGui.QApplication(sys.argv)
> > sys.exit(app.exec_())
>
> OK, I messed around with it some more, and it works.  I just don't
> know how to set an icon, and the example doesn't help at all.
>
> Here is the code:
> import sys
> from PyQt4 import QtCore, QtGui
>
> class Systray(QtGui.QWidget):
>     def __init__(self):
>         QtGui.QWidget.__init__(self)
>
>         self.createActions()
>         self.createTrayIcon()
>
>         #QtCore.QObject.connect(self.trayIcon,
> QtCore.SIGNAL("messageClicked()"), self.messageClicked)
>         #QtCore.QObject.connect(self.trayIcon,
> QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"),
> self.iconActivated)
>
>         self.trayIcon.show()
>
>     def createActions(self):
>         #self.minimizeAction = QtGui.QAction(self.tr("Mi&nimize"), self)
>         #QtCore.QObject.connect(self.minimizeAction,
>         #       QtCore.SIGNAL("triggered()"), self, QtCore.SLOT("hide()"))
>
>         #self.maximizeAction = QtGui.QAction(self.tr("Ma&ximize"), self)
>         #QtCore.QObject.connect(self.maximizeAction,
>         #       QtCore.SIGNAL("triggered()"), self,
>         #       QtCore.SLOT("showMaximized()"))
>
>         #self.restoreAction = QtGui.QAction(self.tr("&Restore"), self)
>         #QtCore.QObject.connect(self.restoreAction,
> #               QtCore.SIGNAL("triggered()"), self,
>         #       QtCore.SLOT("showNormal()"))
>
>         self.quitAction = QtGui.QAction(self.tr("&Quit"), self)
>         QtCore.QObject.connect(self.quitAction, QtCore.SIGNAL("triggered()"),
>                 QtGui.qApp, QtCore.SLOT("quit()"))
>
>     def createTrayIcon(self):
>          self.trayIconMenu = QtGui.QMenu(self)
>          #self.trayIconMenu.addAction(self.minimizeAction)
>          #self.trayIconMenu.addAction(self.maximizeAction)
>          #self.trayIconMenu.addAction(self.restoreAction)
>          #self.trayIconMenu.addSeparator()
>          self.trayIconMenu.addAction(self.quitAction)
>
>          self.trayIcon = QtGui.QSystemTrayIcon(self)
>          self.trayIcon.setContextMenu(self.trayIconMenu)
>
> app = QtGui.QApplication(sys.argv)
> x = Systray()
> sys.exit(app.exec_())
>
> How would I go about setting the icon?

Sorry, here is the code with commented out lines removed:

import sys
from PyQt4 import QtCore, QtGui

class Systray(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.createActions()
        self.createTrayIcon()

	self.trayIcon.show()

    def createActions(self):

	self.quitAction = QtGui.QAction(self.tr("&Quit"), self)
	QtCore.QObject.connect(self.quitAction, QtCore.SIGNAL("triggered()"),
		QtGui.qApp, QtCore.SLOT("quit()"))

    def createTrayIcon(self):
         self.trayIconMenu = QtGui.QMenu(self)
         self.trayIconMenu.addAction(self.quitAction)

         self.trayIcon = QtGui.QSystemTrayIcon(self)
         self.trayIcon.setContextMenu(self.trayIconMenu)

app = QtGui.QApplication(sys.argv)
x = Systray()
sys.exit(app.exec_())



More information about the Python-list mailing list