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()
Qual è 'self'? – detly
Chiedo di impostare l'icona del programma della finestra corrente utilizzando "self" – Nik