pygtkで遊ぼう(11) gtk.Toolbar編(2)

前回のToolBar編(1)で、「うまく動いてそうだけど、なにやらワーニングが表示される」とかきました。

↓↓こんなやつです。

原因と対策がわかりました。

原因

pygtkのリファレンスにちゃんと書いてありました。
(いつもながら。。リファレンスちゃんと読んでませんでした)
pygtkの2.4以上では、gtk.Toolbar.append_item()がサポート対象外(削除予定)となっているようです。append_itemメソッドだけでなく、gtk.Toolbarにアイテムを追加したり削除したりするメソッドはどれもサポート対象外となっていました。

ということで、別の方法でツールバー上にボタンなどを配置しなくてはいけません。

対策

解決方法としては、gtk.ToolButtonを作って、それをツールバーに追加します。
前回作成したget_tool_barを書き換えると、次のようになります。

    def get_tool_bar(self):

        # ツールバーの作成
        tb = gtk.Toolbar()

        # ツールバーの方向を水平方向に指定。
        tb.set_orientation(gtk.ORIENTATION_HORIZONTAL)

        # ツールバーの表示方法を設定。
        # gtk.TOOLBAR_ICONS : アイコンのみを表示
        # gtk.TOOLBAR_TEXT  : テキストのみを表示
        # gtk.TOOLBAR_BOTH  : アイコンとテキストの両方を表示。(アイコンの下にテキスト)
        # gtk.TOOLBAR_BOTH_HORIZ : アイコンとテキストを横に並べて表示。
        tb.set_style(gtk.TOOLBAR_BOTH)

        for i in range(10):
            # ボタン用アイコンを作成。
            iconw = gtk.image_new_from_stock(gtk.STOCK_QUIT,
                                             gtk.ICON_SIZE_BUTTON)
            # ツールバーにボタンを追加。
            closeBt = gtk.ToolButton(iconw, 'Close')
            closeBt.connect('clicked', self.on_exit)
            # ツールチップを設定
            tips = gtk.Tooltips()
            tips.set_tip(closeBt, 'Close this app')

            tb.add(closeBt)
        
        return tb

上のコードの赤文字の部分が、pygtk2.4以上でのやりかたです。
上の例では、10個のCloseボタンを作成して、ツールバーに追加してみました。
私的には、以前のappend_item()よりも、新しいやりかたのほうが好みです。

あ、そうそう、append_item()で作成したボタンとgtk.ToolButton()を混在させることは
できません。混在させた場合には、エラーが表示され、ボタンの追加が失敗しますので
気を付けてください。

いやはや。今日もいい勉強になりました。