[prev in list] [next in list] [prev in thread] [next in thread] 

List:       python-list
Subject:    Re: Using QSystemTrayIcon with PyQt
From:       Benjamin <musiccomposition () gmail ! com>
Date:       2008-04-02 2:34:47
Message-ID: 29632af8-2ed5-434a-aaaa-1c1c51dd4f1d () m44g2000hsc ! googlegroups ! com
[Download RAW message or body]

On Apr 1, 7:56 am, BlueBird <p...@freehackers.org> wrote:
> On Apr 1, 6:00 am, Alex Teiche <xelap...@gmail.com> wrote:
> 
> 
> 
> > On Mar 31, 7:53 pm, Benjamin <musiccomposit...@gmail.com> wrote:
> 
> > > On Mar 31, 8:41 pm, Alex Teiche <xelap...@gmail.com> wrote:
> 
> > > > On Mar 31, 6:40 pm, Alex Teiche <xelap...@gmail.com> wrote:
> 
> > > > > On Mar 31, 11:49 am, Alex Teiche <xelap...@gmail.com> wrote:
> 
> > > > > > On Mar 30, 3:50 pm, Benjamin <musiccomposit...@gmail.com> wrote:
> 
> > > > > > > On Mar 29, 11:02 pm, Alex Teiche <xelap...@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_())
> 
> > > I believe the method you want is QSystemTrayIcon.setIcon.
> 
> > I found that, but what do I pass into it?  Passing a string to a .svg
> > file doesn't work.
> 
> http://www.riverbankcomputing.com/Docs/PyQt4/html/qsystemtrayicon.htm...
> 
> So, you must pass a QIcon.
> 
> Now, the doc of QIcon:http://www.riverbankcomputing.com/Docs/PyQt4/html/qicon.html
> 
> Oh, the list of supported file format is described separately \
> in:http://www.riverbankcomputing.com/Docs/PyQt4/html/qimagereader.html#s... 
> I see that svg is not part of that list. So, it is not surprising that
> it does not work but there are plenty of other formats that will work.
Well, you can use the QtSvg module to add support for them.
> 
> It took me about 20 seconds to solve your problem by reading the
> appropriate documentation. I suggest you do that too in the future...
> 
> regards,
> 
> Philippe

-- 
http://mail.python.org/mailman/listinfo/python-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic