2010-12-11 22 views
6

Je sais que c'est très simple, il suffit d'utiliser la commande self.set_icon_from_file("icon.png"), mais mon programme n'affiche toujours pas l'icône. J'ai vérifié que le fichier icon.png se trouvait dans le même répertoire de travail que le fichier Python. J'ai également essayé de donner le chemin complet du fichier, mais il n'affiche toujours pas l'icône. J'utilise Ubuntu 10.10 si cela aide et utilise Python V2.6. J'utilise Glade Interface Designer pour concevoir l'interface graphique. Cependant, j'ai essayé de régler l'icône en utilisant Glade et en utilisant la commande ci-dessus.Ajouter une icône de programme en Python GTK

J'espère avoir fourni suffisamment d'informations.

EDIT: J'ai obtenu l'icône d'état pour travailler dans mon programme .. Cependant, dans la question je voulais dire l'icône du programme affiché dans la barre des tâches et aussi sur le côté gauche de la barre d'application.

+0

Qu'est-ce 'self'? – detly

+0

Je lui demande de définir l'icône du programme de la fenêtre en cours en utilisant "self" – Nik

Répondre

6

J'ai vérifié que icon.png se trouvait dans le même répertoire de travail du fichier python.

Cela peut être votre problème - les chemins sont cherchés par rapport au répertoire de travail de l'interpréteur Python , pas le fichier contenant le code. Je me retrouve souvent la définition d'une fonction comme:

def get_resource_path(rel_path): 
    dir_of_py_file = os.path.dirname(__file__) 
    rel_path_to_resource = os.path.join(dir_of_py_file, rel_path) 
    abs_path_to_resource = os.path.abspath(rel_path_to_resource) 
    return abs_path_to_resource 

mine n'est pas en fait assez que bavard, mais nous espérons que les noms de variables dire clairement ce qui se passe. En outre, l'obtention du chemin absolu n'est pas strictement nécessaire, mais pourrait vous aider si vous avez besoin de déboguer.

Ensuite, vous pouvez juste faire:

self.set_icon_from_file(get_resource_path("icon.png")) 

Mise à jour: Voici un programme de démonstration. "icon.png" se trouve dans le même répertoire que ce script, et je le lance en utilisant ./gtktest.py. Je vois l'icône dans le coin supérieur gauche (endroit standard pour mon thème). icon.png est simplement une forme dessinée dans Inkscape et exportée en tant que bitmap (elle fonctionne aussi avec le SVG original, de toute façon).

#!/usr/bin/env python 
import pygtk 
pygtk.require('2.0') 
import gtk 

class HelloWorld: 

    def delete_event(self, widget, event, data=None): 
     return False 

    def destroy(self, widget, data=None): 
     gtk.main_quit() 

    def __init__(self): 
     # create a new window 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 

     self.window.set_icon_from_file('icon.png') 

     self.window.connect("delete_event", self.delete_event) 
     self.window.connect("destroy", self.destroy) 

     # Creates a new button with the label "Hello World". 
     self.button = gtk.Button("Hello World") 

     self.window.add(self.button) 
     self.button.show() 
     self.window.show() 

    def main(self): 
     gtk.main() 

if __name__ == "__main__": 
    hello = HelloWorld() 
    hello.main() 
+0

Non, ça ne marche pas. La chose est quand j'essaye l'image d'icône de statut, je donne juste le chemin de fichier comme nom d'image et cela fonctionne parfaitement. C'est juste que l'icône du programme ne le fait pas. J'ai essayé de donner le nom complet du chemin depuis la racine. Je n'arrive toujours pas à le faire fonctionner. – Nik

+0

Je pense avoir un exemple de code au travail, alors je vais le mettre au point et le poster demain. – detly

+0

@Nik - posté un code de démo - dites-moi si cela fonctionne pour vous. – detly

2

Je ne suis pas sûr de ce que l'icône que vous créez, mais essayez cette petite icône-montrant PyGTK exemple de icône de la barre des tâches J'ai pensé:

#!/usr/bin/env python 
import pygtk 
pygtk.require('2.0') 
import gtk 

# create icon object 
statusIcon = gtk.StatusIcon() 

# load it 
statusIcon.set_from_file("icon.ico") 

# show it 
statusIcon.set_visible(True) 

# and run main gtk loop 
gtk.main() 

Peut-être que vous venez de manquer la commande statusIcon.set_visible(True)

+0

Pourquoi parlez-vous des icônes de la barre d'état système? – detly

+1

Parce que vous n'avez pas spécifié quelle icône vous aviez en tête et que je voulais vous aider. Mon exemple est une icône pour la barre des tâches système. J'espère que ça a aidé. –

0

Pour les icônes standard, utilisez stock items, et trouver des icônes qui convient à vos besoins. cette façon

  • Vous ne devez pas emballer les icônes de cinque votre programme
  • Les icônes changent selon le thème de l'utilisateur et se fondra bien dans son environnement .

pour pygtk:

gtk.icon_theme_get_default().load_icon("folder-open", 128, 0) 
Questions connexes