Добавление иконки программы в Python GTK - PullRequest
9 голосов
/ 11 декабря 2010

Я знаю, что это очень просто, просто используйте команду self.set_icon_from_file("icon.png"), однако моя программа по-прежнему не отображает значок. Я убедился, что icon.png находится в том же рабочем каталоге, что и файл Python. Я также попытался указать полный путь к файлу, но значок не отображается.

Я использую Ubuntu 10.10, если это помогает, и использую Python V2.6. Я использую Glade Interface Designer для разработки GUI. Однако я попытался установить значок как с помощью Glade, так и с помощью приведенной выше команды.

Я надеюсь, что предоставил достаточно информации.

РЕДАКТИРОВАТЬ: я получил значок состояния для работы в моей программе .. Однако в вопросе я имел в виду значок программы, отображаемый в панели задач, а также в левой части панели приложения .

Ответы [ 3 ]

7 голосов
/ 12 декабря 2010

Я убедился, что 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()
2 голосов
/ 11 декабря 2010

Я не уверен, какой значок вы создаете, но попробуйте этот наименьший PyGTK-пример, показывающий значок на панели задач Я подумал:

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

Возможно, вы просто пропустиликоманда statusIcon.set_visible(True)

0 голосов
/ 05 августа 2013

Для стандартных значков используйте стоковые предметы и найдите значки, которые соответствуют вашим потребностям.таким образом

  • Вам не нужно упаковывать значки с вашей программой
  • Значки меняются в зависимости от темы пользователя и будут хорошо сочетаться с ее окружением.

для pyGTK:

gtk.icon_theme_get_default().load_icon("folder-open", 128, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...