web-dev-qa-db-ja.com

PyGtkでウィンドウアイコンをGtkストックアイコンに設定する

ウィンドウにGtkストックアイコンを追加しようとしています。コードは次のとおりです。

#! /usr/bin/python

from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title='My Window Title')

        self.icon = self.render_icon(Gtk.STOCK_FLOPPY, 1)
        self.set_icon(self.icon)

        self.connect('delete-event', Gtk.main_quit)

win = MyWindow()
win.show_all()
Gtk.main()

このページ アイコンサイズは Gtkアイコンサイズ定数 のいずれかである必要がありますが、Eclipseコード補完ではリストされた値が表示されず、手動で入力すると取得する

AttributeError: 'gi.repository.Gtk'オブジェクトには属性 'ICON_SIZE_SMALL_TOOLBAR'がありません

アイコンサイズをリテラル1に設定すると、スクリプトは機能します。私はこれがGtkまたはPyGtkバージョンで何かをしなければならないと確信していますが、私が間違っていることを理解することはできません。事前に感謝し、初心者の質問を申し訳ありません。

2
Anonimista

問題は、PyGTKのドキュメントを見ているが、スクリプトでPyGI/GTK3を使用していることです。

gtk_widget_render_icon() のドキュメントには次のように書かれています。

gtk_widget_render_iconはバージョン3.0以降廃止されており、新しく作成されたコードでは使用しないでください。代わりにgtk_widget_render_icon_pixbuf()を使用してください。

それから gtk_widget_render_icon_pixbuf() のドキュメントはこれを言います:

gtk_widget_render_icon_pixbufはバージョン3.10から非推奨になり、新しく作成されたコードでは使用すべきではありません。代わりにgtk_icon_theme_load_icon()を使用してください。

すごいね!それでは先に進みましょう。

gtk_icon_theme_load_icon() は次の引数を取ります。

  • icon_name:検索するアイコンの名前
  • size:目的のアイコンサイズ。結果のアイコンは、正確にこのサイズではない場合があります
  • flags:アイコン検索の動作を変更するフラグ

これを知っていれば、古いrender_icon次の行:

        icontheme = Gtk.IconTheme.get_default()
        self.icon = icontheme.load_icon(Gtk.STOCK_FLOPPY, 128, 0)

128x128 pxの画像を検索します。必要に応じてフラグを変更したい場合があります。列挙型は here で文書化されています。これはPythonのように翻訳できます:

GTK_ICON_LOOKUP_NO_SVG -> Gtk.IconLookupFlags.NO_SVG
GTK_ICON_LOOKUP_FORCE_SVG -> Gtk.IconLookupFlags.FORCE_SVG
GTK_ICON_LOOKUP_USE_BUILTIN -> Gtk.IconLookupFlags.USE_BUILTIN
# And so on...
8
Timo