Установить значок окна в Gtk Stock Icon в PyGtk
Я пытаюсь добавить значок Gtk Stock в свое окно. Вот код:
#! /usr/bin/python
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title='My Window Title')
self.icon = self.render_icon(Gtk.STOCK_FLOPPY, 1)
self.set_icon(self.icon)
self.connect('delete-event', Gtk.main_quit)
win = MyWindow()
win.show_all()
Gtk.main()
Согласно этой странице размер значка должен быть одной из констант размера значка Gtk, но завершение кода Eclipse не показывает ни одно из перечисленных значений, и если я вручную ввожу одно из них, я получаю
AttributeError: у объекта 'gi.repository.Gtk' нет атрибута 'ICON_SIZE_SMALL_TOOLBAR'
Если я установлю размер значка в литерал 1, скрипт будет работать. Я уверен, что это как-то связано с версиями Gtk или PyGtk, но я не могу понять, что я делаю неправильно. Заранее спасибо и извините за вопрос новичка.
1 ответ
Проблема в том, что вы просматриваете документацию PyGTK, но используете PyGI/GTK3 в своем скрипте.
Документы на gtk_widget_render_icon()
говорит следующее:
Начиная с версии 3.0, gtk_widget_render_icon устарела и не должна использоваться во вновь создаваемом коде. Вместо этого используйте gtk_widget_render_icon_pixbuf().
Тогда документы на gtk_widget_render_icon_pixbuf()
говорит это:
gtk_widget_render_icon_pixbuf устарела с версии 3.10 и не должна использоваться во вновь создаваемом коде. Вместо этого используйте gtk_icon_theme_load_icon().
Отлично, а?! Итак, давайте двигаться дальше.
gtk_icon_theme_load_icon()
принимает следующие аргументы:
- icon_name: имя иконки для поиска
- Размер: желаемый размер значка. Получившийся значок может быть не совсем такого размера
- flags: флаги, изменяющие поведение поиска значков
Зная это, вы можете изменить свой старый render_icon
строка со следующим:
icontheme = Gtk.IconTheme.get_default()
self.icon = icontheme.load_icon(Gtk.STOCK_FLOPPY, 128, 0)
Который будет искать изображение 128x128 пикселей. Вы можете изменить флаги, если это необходимо, перечисление задокументировано здесь. Это можно перевести на Python следующим образом:
GTK_ICON_LOOKUP_NO_SVG -> Gtk.IconLookupFlags.NO_SVG
GTK_ICON_LOOKUP_FORCE_SVG -> Gtk.IconLookupFlags.FORCE_SVG
GTK_ICON_LOOKUP_USE_BUILTIN -> Gtk.IconLookupFlags.USE_BUILTIN
# And so on...