Что такое непринужденный способ отображения значка на складе в GTK3?

Я собираю GUI, используя PyGObject. Этот код Python работает в контексте. Я получаю кнопку панели инструментов со значком «Открыть».

from gi.repository import Gtk # ... toolbar = Gtk.Toolbar() toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR) # ... self.fileOpen = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN) self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) toolbar.insert(self.fileOpen, -1) 

Изображение показывает значок, отображаемый на панели инструментов.

Но согласно этому ресурсу , new_from_stock() устарел:

Устаревший с версии 3.10: Gtk.ToolButton.new () используйте Gtk.ToolButton.new () вместе с Gtk.Image.new_from_icon_name () .

Тогда ладно. Итак, после того, как я рылся дальше, это то, что я придумал для замены:

 self.fileOpen = Gtk.ToolButton( Gtk.Image.new_from_icon_name("document-open", Gtk.IconSize.LARGE_TOOLBAR), "Open") self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) toolbar.insert(self.fileOpen, -1) 

Но это результат:

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

Каков правильный способ сделать это, который по-прежнему поддерживается текущей библиотекой GTK?

Глядя на этот пример C ++ GitHub , я с удивлением обнаруживаю прямой вызов функции static new() а не конструктора.

Поэтому я решил попробовать. Посмотрите внимательно на разницу. Это тонко.

  #vvv self.fileOpen = Gtk.ToolButton.new( Gtk.Image.new_from_icon_name("document-open", Gtk.IconSize.LARGE_TOOLBAR), "Open") self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) toolbar.insert(self.fileOpen, -1) 

К моему удивлению, это отображает значок, где другого подхода нет.

Бонус: более чистая версия выше:

 # iconSize to be reused iconSize = Gtk.IconSize.LARGE_TOOLBAR # ... openIcon = Gtk.Image.new_from_icon_name("document-open", iconSize) self.fileOpen = Gtk.ToolButton.new(openIcon, "Open") self.fileOpen.connect("clicked", self.on_FileOpenStandard_activate) toolbar.insert(self.fileOpen, -1)