2010-12-11 15 views
6

So che questo è molto semplice, basta usare il comando self.set_icon_from_file("icon.png"), tuttavia il mio programma continua a non visualizzare l'icona. Mi sono assicurato che icon.png si trovasse nella stessa directory di lavoro del file Python. Ho anche provato a dare il percorso completo del file, ma ancora non visualizza l'icona.Aggiunta di un'icona di programma in Python GTK

Sto usando Ubuntu 10.10 se questo aiuta e utilizza Python V2.6. Io uso Glade Interface Designer per progettare la GUI. Tuttavia, ho provato a impostare l'icona sia usando Glade che usando il comando sopra.

Spero di aver fornito informazioni sufficienti.

EDIT: ho avuto l'icona di stato a lavorare nel mio programma .. Tuttavia nella questione che intendevo l'icona del programma visualizzata nella barra delle applicazioni e anche sul lato sinistro della barra delle applicazioni.

+0

Qual è 'self'? – detly

+0

Chiedo di impostare l'icona del programma della finestra corrente utilizzando "self" – Nik

risposta

6

Mi sono assicurato che icon.png si trovasse nella stessa directory di lavoro del file python.

Questo potrebbe essere il vostro problema - i percorsi sono guardato fino relativo alla directory di lavoro del Python interprete, non il file contenente il codice. Spesso mi capita di definire una funzione come:

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 

Il mio non è in realtà abbastanza che verbose, ma si spera che i nomi delle variabili mettere in chiaro quello che sta succedendo. Inoltre, ottenere il percorso assoluto non è strettamente necessario, ma potrebbe essere utile se è necessario eseguire il debug.

Poi si può solo fare:

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

Aggiornamento: Qui è un programma dimostrativo. "icon.png" si trova nella stessa directory di questo script e lo eseguo utilizzando ./gtktest.py. Vedo l'icona nell'angolo in alto a sinistra (luogo standard per il mio tema). icon.png è solo una forma disegnata in Inkscape ed esportata come bitmap (funziona anche con l'originale SVG, comunque).

#!/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

No, non funziona. Il fatto è che quando provo l'immagine dell'icona di stato, mi limito a dare il filepath come nome dell'immagine e funziona perfettamente. È solo che con l'icona del programma non è così. Ho provato a dare l'intero nome del percorso direttamente dalla radice. Non riesco ancora a farlo funzionare. – Nik

+0

Penso di avere qualche codice di esempio al lavoro, quindi lo ridurrò e lo pubblicherò domani. – detly

+0

@Nik - ha pubblicato un codice demo - dimmi se funziona per te. – detly

2

io non sono sicuro di quello che l'icona che si sta creando, ma provare questo piccolo PyGTK icone che mostra esempio di barra delle applicazioni l'icona ho pensato:

#!/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() 

Forse hai solo perso il comando statusIcon.set_visible(True)

+0

Perché stai parlando delle icone della barra delle applicazioni? – detly

+1

Perché non hai specificato quale icona avevi in ​​mente e volevo aiutarti.Il mio esempio è un'icona per la barra delle applicazioni di sistema. Spero che abbia aiutato. –

0

Per le icone standard, utilizzare stock items, e trovare le icone che si adatta alle vostre esigenze. in questo modo

  • Non è necessario mettere in valigia icone whith vostro programma
  • Le icone cambiano in base al tema dell'utente e si fondono piacevolmente nel suo ambiente.

per pyGTK:

gtk.icon_theme_get_default().load_icon("folder-open", 128, 0) 
Problemi correlati