2015-11-22 11 views
6

私はPyGObjectを使ってGUIを組み立てています。この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.Image.new_from_icon_name()使用Gtk.ToolButton.new()

いいえ。だから、さらに掘りした後、これは私が交換のために思い付いたものです:

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) 

私の驚いたことに、これは他の方法ではないアイコンを表示します。

ボーナス:上記のクリーナーバージョン:

# 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

関連する問題