Bonjour,
Je suis en plein développement d'un petit agent qui tournerai dans le systray, pour Windows et Linux.
J’étais tombé sur l’exemple de tyrtamos, dont je me suis inspiré.
Tout fonctionne comme prévu, sur Windows 7, Windows 10. Sur Linux, toutes les fonctionnalités sont aussi présentes et j'ai juste un petit souci d'affichage de l'icone de l'application sur un poste Debian 8.4 64bits.
Je suis en Python 3.4 64bits + PyQt5.5.1_64
Avant de poster sur le forum, j'ai fait des recherches, mais n'ai trouvé que peu d'informations pour Linux.
J'ai essayé avec différentes icônes (png, svg, xpm) en différentes tailles, mais rien n'y fait...
Je sais que l'icône est bien trouvée, car pour en être sûr je la met aussi sur une entrée du menu et là elle s'affiche bien.
Voici le code de ma classe "SystemTrayIcon":
... appelée de puis le programme principal comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 from PyQt5 import (QtWidgets, QtGui) import Model class SystemTrayIcon(QtWidgets.QSystemTrayIcon): """ Permet de mettre l'application dans la barre des taches """ _model = Model.Model() def __init__(self, app, qicone, tooltip="", parent=None): super(SystemTrayIcon, self).__init__(qicone, app) self.app = app self.parent = parent # ajoute une bulle d'information quand la souris est sur l'icône tray if tooltip != "": self.setToolTip(self._model.app_tooltip) # initialise le menu self.initmenu() # def initmenu(self): # crée le menu menu = QtWidgets.QMenu(self.parent) ouvrirPopupIcon = QtGui.QIcon(self._model.app_icone) # CELLE-CI S'AFFICHE !! ouvrirPopupAction = QtWidgets.QAction(ouvrirPopupIcon, '&Ouvrir Alerte', self) ouvrirPopupAction.triggered.connect(self.alerte) menu.addAction(ouvrirPopupAction) menu.addSeparator() # ferme la fenêtre et quitte le programme: # l'icône de l'item "Quitter" du menu sera une simple croix rouge quitterIcon = QtGui.QIcon.fromTheme("application-exit", QtGui.QIcon(self._model.quitter_icone)) quitterAction = QtWidgets.QAction(quitterIcon, '&Quitter', self) quitterAction.triggered.connect(self.quitter) menu.addAction(quitterAction) self.setContextMenu(menu) def alerte(self): """ Ouvre une fenetre de type Alerte""" pass def quitter(self): """permet de quitter: ferme le programme ainsi que le systemtray""" reponse = QtWidgets.QMessageBox.question(None, "Confirmez!", "Voulez-vous vraiment quitter?", QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) if reponse == QtWidgets.QMessageBox.Yes: # ferme la fenêtre si elle est encore ouverte try: self.fen.close() except Exception: pass # ferme l'application et arrête l'exécution self.app.quit()
Voila, si quelqu'un à une idée, je suis preneur, d'autant plus que si ça ne fonctionne pas mieux je vais devoir laisser tomber PyQt5 au profit de PyGObject, que je trouve un peu moins sexy.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ... # Landement de l'application dans la barre des taches trayIcon = SystemTrayIcon(app, QtGui.QIcon(model.app_icone), model.app_tooltip) # ALORS QUE CELLE-LA NE S'AFFICHE PAS, UNIQUEMENT SUR LINUX !! trayIcon.show() ...
Partager