Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Un icone dans la zone de notification gnome..

+2 votes

Je cherche à faire une petite appli qui:
-loge un icone dans la zone de notification;
-le click gauche appelle une fonction qui change l'icone
-le click droit déroule un petit menu avec 2 actions + "about" + "quit"

J'ai le 1) et le changement d'icone, c'est le reste qui me pose problème.
J'ai testé plein d'exemples, mais je n'ai pas trouvé.

Une idée ?

EDIT: c'est sur ubuntu 14.4, il y a python 2.7 et 3.x, mais le prog. commence par:

#!/usr/bin/python
# -*- coding: UTF8 -*-

import gobject
import gtk
import appindicator
import pynotify

donc je dirais python 2 (je n'y connais pas grand chose sur les differences 2/3)
Désolé pour l'oubli

EDIT2: à la demande générale de c0da, j'ai posé le source sur pastebin mais c'est tellement affligeant de nullité que je sais pas si ça va aider..

demandé 16-Fev-2015 par madxtof (120 points)
edité 17-Fev-2015 par madxtof

Quelle version de Python ? Quelle bibliothèque ?

Pourrais- tu nous coller le code entier? (ici ou sur un pastebin-like si le code est trop long)

tu peux donner les réf pour installer pynotify? il me les manque pour faire tourner ton code.

Purée, c'est pas en pip; au strace, j'ai vu passer: open("/usr/lib/python2.7/dist-packages/gtk-2.0/pynotify/_pynotify.so", O_RDONLY) = 4 donc j'en déduis (?) que c'est pris dans gtk-2 ..

Ce lien traite de comment ajouter un clic droit + menu à un widget.
http://stackoverflow.com/questions/6616270/python-right-click-menu-using-pygtk

Partant du principe que l'icône est un widget, ça devrait être adaptable (le lien traite d'un menu). Principalement dans la première réponse, autour de :

button.connect_object("event", self.button_press, menu)

Sinon y'a ce lien également :
http://stackoverflow.com/questions/28465956/popup-menu-doesnt-appear-when-clicking-on-statusicon

Agagax: Merci pour ces infos, mais le 1er lien marche pour une fenêtre (je voulais un icone dans la zone de notification) et le 2eme ouvre une fenêtre vide, sans menu ni icone (?).
Et quand je fais: ind.connect_object("event", do_event, menu), comme suggéré, il me dit:
TypeError: <appindicator.Indicator object at 0x7f0ad347e960 (AppIndicator at 0x269a150)>: unknown signal name: event

Madxtof: Note : je n'y connais rien en GTK.

Pris sur :
http://python.6.x6.nabble.com/popup-menu-in-gtk-statusicon-under-windows-td1946003.html

(trad rapide)

Voici un script qui crée un gtk.statusicon puis un menu qui s'affiche
quand je fais un clic droit sur l'icône[.../...].

Le type a un problème avec une histoire de sous-menu pour lequel la callback ne fonctionne pas sous Windows mais fonctionne sous Linusque.

Le point important EST que ça affiche un menu depuis un prog icônifié. Le code :

#!/usr/bin/env python 
import gtk 
import pygtk 

def quit_cb(widget, data = None): 
    if data: 
        data.set_visible(False) 
    gtk.main_quit() 

def cb(widget, data=None): 
    print 'cb' 

def popup_menu_cb(widget, button, time, data = None): 
    if button == 3: 
        if data: 
            data.show_all() 
            data.popup(None, None, None, 3, time) 

statusIcon = gtk.StatusIcon() 

menu = gtk.Menu() 
menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT) 
menuItem.connect('activate', quit_cb, statusIcon) 
menu.append(menuItem) 

sm = gtk.Menu() 
menuItem = gtk.MenuItem('asd') 
menuItem.set_submenu(sm) 
menuItem2 = gtk.MenuItem('asdf') 
menuItem2.connect('activate', cb) 
sm.append(menuItem2) 
menu.append(menuItem) 

statusIcon.set_from_stock(gtk.STOCK_HOME) 
statusIcon.set_tooltip("StatusIcon test") 
statusIcon.connect('popup-menu', popup_menu_cb, menu) 
statusIcon.set_visible(True) 

gtk.main() 

Note: j'ai essayé d'importer ton code depuis Pastebin mais rien n'y fait, c'est plein d'erreurs dûes à moultes dépendances que je ne satisfais pas. Pour faire court : j'y arrive ni en Py3 ni en Py2 et ne suis pas suffisamment calé pour corriger le truc :-/

Je suggère que tu copies/colles ce code au dessus (pas sûr qu'il soit en Py2 -- ou même Py3) et que tu le fasses tourner puis que tu l'analyse pour savoir comment il fait pour avoir son menu.

Hors-sujet: Py2 ou Py3
Cela dit, puisque tu posais la question, autant que je sache, les différences py2 / py3 sont assez nombreuses. Vois chez Sam&Max, l'article et les commentaires pour un peu plus d'info. Dans ton cas, /usr/bin/python devrait être Python 2 (par défaut sous Ubuntu il me semble) MAIS tu dois avoir également Python 3 installé (il me semble aussi).
Ligne de commande Linusque:

$ which python
/usr/bin/python
$ which python3
/usr/bin/python3

si tu lances "python" tu dois voir un truc dans ce genre :

$ /usr/bin/python   (ou uniquement 'python')
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Python 2.7.6 ==> python 2 (point 7 point 6).

Sinon pour avoir (ou savoir si tu as):

$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Le 3.4.0.

Je suis sous Mint dernier jus, basé sur Ubuntu (à peu près). tu devrais avoir la même chose.

J'utilise Eclipse + Pydev où j'ai le choix d'utiliser pour mon projet soit un py2 soit un py3. Enfin, je te raconte ma vie qui n'a pas grand chose à voir avec le fromage mais c'est juste au cas où.

Se connecter ou S'inscrire pour répondre à cette question.

...