Я убедился, что icon.png находится в том же рабочем каталоге файла python.
Это может быть вашей проблемой - пути ищутся относительно рабочего каталогаИнтерпретатор Python , а не файл, содержащий код.Я часто нахожу себя определяющим функцию вроде:
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
Моя на самом деле не такая уж многословная, но, надеюсь, имена переменных дают понять, что происходит.Кроме того, получение абсолютного пути не является строго необходимым, но может помочь, если вам нужно отладить.
Тогда вы можете просто сделать:
self.set_icon_from_file(get_resource_path("icon.png"))
Обновление: Вот демонстрационная программа."icon.png" находится в том же каталоге, что и этот скрипт, и я запускаю его, используя ./gtktest.py
.Я вижу значок в верхнем левом углу (стандартное место для моей темы).icon.png
- это просто фигура, нарисованная в Inkscape и экспортированная как растровое изображение (в любом случае, она работает и с исходным SVG).
#!/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()