[Python,Gtk4] Gtk.AboutDialogの使用について

Gtk.AboutDialogの使用

 Gtk.AboutDialogはプログラムに関する情報を表示するWidgetあり、主にプログラムのヘルプメニューをで使用されます。表示できる情報は、プログラムのロゴ、名前、著作権、Web サイト、ライセンス、 プログラムに携わった著者、ドキュメンタリー作成者、翻訳者、アーティストのクレジットであり、これらの情報も、表示するには指定する必要があります。

 今回は、Gtk.AboutDialogの作成方法と、それを表示する方法について紹介します。

今回紹介する内容
 ・ Gtk.AboutDialogを作成する
 ・ Gtk.AboutDialogを表示する

Gtk.AboutDialogの作成

Gtk.AboutDialogを作成する

 Gtk.AboutDialogは、以下のようにGtk.AboutDialog()の中にプロパティを指定して作成します。

        dialog = Gtk.AboutDialog(
            modal=True,
            authors=['taniyoshima'],
            comments='AboutDialogのサンプル',
            license_type=Gtk.License.MIT_X11,
            version='1.0.0',
            program_name='Gtk.AboutDialog Test',
            logo=icon
        )

Gtk.AboutDialogにプロパティを追加する

 Gtk.AboutDialogには、以下をプロパティに指定することで設定可能であり、それらは表の型に示す形でデータを入力します。

名前内容
artists[str]アーティスト     
authors[str]著者
commentsstrコメント
copyrightstr著作権
documenters[str]書類作成者
licensestrライセンス
license-typeGtk.Licenseライセンスタイプ
logoGdk.Paintable   ロゴ
logo_icon_namestrロゴアイコンの名前
program_namestrプログラム名
system_imformation  strシステム情報
translator_creditsstr翻訳者の功績
versionstrバージョン
websitestrWebサイト
website_labelstrWebサイトへのリンクのラベル
wrap_licenseboolライセンスダイアログでテキストを
折り返すかどうか。
Gtk.AboutDialogのプロパティより

Gtk.AboutDialogのLogoに画像ファイルを指定する

 Logoに画像ファイルを表示するには、Gtk.Picture.new_for_filename()で画像ファイルを指定したGtk.Pictureを定義して、そのGtk.Pictureからメソッドget_paintable()によりGtk.Paintableを取得します(赤字部分)

 作成したicon(Gtk.Paintable)は、Gtk.AboutDialogの定義時にプロパティlogoで指定することで、Logo画像として表示されます。

    # アイコンの読み込み
        icon = Gtk.Picture.new_for_filename('icon.png').get_paintable()
    # Gtk.AboutDialogの指定
        dialog = Gtk.AboutDialog(
            modal=True,
            authors=['taniyoshima'],
            comments='AboutDialogのサンプル',
            license_type=Gtk.License.MIT_X11,
            version='1.0.0',
            program_name='Gtk.AboutDialog Test',
            logo=icon
        )

Gtk.AboutDialogを表示する

 作成したGtk.AboutDialogは、以下のようにpresent()を使用することで表示します。

    dialog.present()

Gtk.AboutDialogのサンプルプログラム

 下のサンプルプログラムは、Gtk.PopoverMenuBarのサンプルプログラム2と同じものです。’ヘルプ’‐’バージョン情報’を選択すると、Gtk.AboutDialogが表示されます。

Gtk.AboutDialogに使用するアイコン画像(下のSmple Iconと表示した画像)
サンプルプログラムと同じフォルダに保存してから実行してください

import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gio


APPID = 'com.github.taniyoshima.g4_fblog_menubar2'

MENUBAR_XML = """
<!--?xml version="1.0" encoding="UTF-8"?-->
<interface>
    <menu id="menu">
        <submenu>
            <attribute name="label">ファイル</attribute>
            <item>
                <attribute name="label">ラベル変更</attribute>
                <attribute name="action">win.label_tc</attribute>
            </item>
            <item>
                <attribute name="label">終了</attribute>
                <attribute name="action">app.quit</attribute>
            </item>
        </submenu>
        <submenu>
            <attribute name="label">ヘルプ</attribute>
            <item>
                <attribute name="label">バージョン情報</attribute>
                <attribute name="action">app.about</attribute>
            </item>
        </submenu>
    </menu>
</interface>
"""


class Gtk4TestTest(Gtk.ApplicationWindow):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='Gtk.PopoverMenuBar2 Test',
            height_request=150, width_request=350
        )

        # 'ラベル変更'用のアクション
        action = Gio.SimpleAction.new("label_tc", None)
        action.connect("activate", self.on_label_change)
        self.add_action(action)

        builder = Gtk.Builder.new_from_string(MENUBAR_XML, -1)
        menu = builder.get_object("menu")

        menubar = Gtk.PopoverMenuBar.new_from_model(menu)

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        vbox.append(menubar)
        self.label = Gtk.Label(label='hello')
        vbox.append(self.label)
        self.set_child(vbox)

    # アクションlabel_tcの処理
    def on_label_change(self, action, param):
        self.label.set_text('Good-Bye')


class Gtk4TestApp(Gtk.Application):

    def __init__(self):
        Gtk.Application.__init__(self, application_id=APPID)

    def do_startup(self):
        Gtk.Application.do_startup(self)

        # '終了'用のアクション
        action = Gio.SimpleAction.new('quit', None)
        action.connect('activate', self.on_quit)
        self.add_action(action)

        # 'バージョン情報'用のアクション
        action = Gio.SimpleAction.new("about", None)
        action.connect("activate", self.on_about)
        self.add_action(action)

    def do_activate(self):
        window = Gtk4TestTest(self)
        window.present()

    # アクションquitの処理
    def on_quit(self, action, param):
        self.quit()

    # アクションaboutの処理
    def on_about(self, action, param):
        icon = Gtk.Picture.new_for_filename('icon.png').get_paintable()
        dialog = Gtk.AboutDialog(
            modal=True,
            authors=['taniyoshima'],
            comments='AboutDialogのサンプル',
            license_type=Gtk.License.MIT_X11,
            version='1.0.0',
            program_name='Gtk.AboutDialog Test',
            logo=icon
        )

        dialog.present()


def main():
    app = Gtk4TestApp()
    app.run()


if __name__ == '__main__':
    main()

まとめ

  • Gtk.AboutDialogの内容は、プロパティやメソッドにより指定します。
  • Logoに使用する画像ファイルは、Gtk.Picture.new_for_filenameで読み込み、そのGtk.Pictureにメソッドget_paintableを使用することでGtk.Paintableにします。

 次回の予定

 次回は、Gtk.Dialogの使い方を見ていきます。

タイトルとURLをコピーしました