2015-11-22 1 views
6

Я собираю графический интерфейс с использованием PyGObject. Этот код Python работает в контексте. Я получаю кнопку панели инструментов со значком «Открыть».Что такое неисчерпаемый способ отображения значка запаса в GTK3?

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) 

Image shows icon appearing on the toolbar.

Но согласно this resource, new_from_stock() осуждается:

Устаревший начиная с версии 3.10: Использование 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) 

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

Image shows icon not appearing on the toolbar.

Что такое правильный способ сделать это, что до сих пор поддерживается по существующей библиотеке GTK?

ответ

4

Глядя на это C++ GitHub example, я с удивлением обнаруживаю прямой вызов статической функции 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) 

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

Bonus: уборщик версия выше:

# 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) 
+1

Объяснение, что вы нашли: в переплетах PyGObject, Конструкторы объектов принимать только арг ключевых слов, представляющих свойства GObject объекта. С другой стороны, конструкторы C, которые часто имеют дополнительные параметры удобства для задания свойств, поскольку свойства могут быть громоздкими в C, связаны как статические методы 'new()'. Это должно работать одинаково хорошо: 'Gtk.ToolButton (icon_widget = openIcon , label = "Open") ' – ptomato

Смежные вопросы