PyGTK устанавливает значок окна со стоковым изображением

#python #gtk #icons #pygtk #gdkpixbuf

#python #gtk #Значки #pygtk #gdkpixbuf

Вопрос:

Я чувствую, что это должно быть довольно просто, но, думаю, я чего-то не хватает.

Итак, я хочу установить значок окна с одним из стоковых изображений. Я пытался:

 windowIcon = gtk.image_new_form_stock(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_MENU)
window.set_icon(windowIcon.get_pixbuf())
  

Затем Python жалуется, что:

Файл «./sample.py «, строка 44, в инициализации
window.set_icon(windowIcon.get_pixbuf())
Ошибка значения: изображение должно быть GdkPixbuf или пустым

Я пытаюсь преобразовать GtkImage в GdkPixbuf, потому что, когда я этого не сделал, python пожаловался, что

Ошибка типа: значок должен быть GdkPixbuf или нет

В документации pygtk говорится:

Если тип хранилища изображения также не gtk.IMAGE_EMPTY или gtk.IMAGE_PIXBUF будет вызвано исключение ValueError.

Итак, я предполагаю, что тип хранилища стокового изображения неверен. Вопрос в том, как мне обойти это?

Ответ №1:

Вы можете использовать метод .render_icon() для любого GtkWidget, чтобы предоставить стандартный элемент в качестве значка.

 windowicon = window.render_icon(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_MENU)
window.set_icon(windowicon)
  

Комментарии:

1. Спасибо за ответ! Знаете ли вы, как бы я установил пользовательский значок из файловой системы?

Ответ №2:

render_icon() Метод работает так, как указано выше. В вашем коде возникали проблемы, потому что get_pixbuf() метод возвращался None . Это потому, что изображение не было создано из pixbuf , и по какой-то причине оно не преобразует его. Другой способ получить pixbuf из изображения — использовать gtk.gdk.pixbuf_new_from_image() функцию.