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

目標

 Gtk.DorpDownは、オプションのリストから項目を選択するウィジェットです。選択した項目はGtk.DropDownに表示されます。

 今回は、①Gtk.DropDownのオプションのリストの作成、②Gtk.DropDownの項目が変更された信号の取得、③Gtk.DropDownの項目の取得の方法を紹介します。

Gtk.DropDownの定義

 Gtk.DropDownの定義は以下のようにおこないます。今回はメソッドnew_from_stringsを使用してGtk.DropDownを定義しています。このメソッドを使用すると定義時に、Gtk.DropDownのオプションのリストを指定することができます。

        self.dropdown_list = ['項目1', '項目2', '項目3']

        dropdown = Gtk.DropDown.new_from_strings(self.dropdown_list)

Gtk.DropDownの項目が変更した場合の処理

 Gtk.DropDownの項目が変更されたという情報を取得するのには、シグナル’notify::selected’を使用します。シグナル’notify::selected’と関数を紐付けることで、Gtk.DropDownの項目を変更した場合に所定の処理をおこなうようにできます。

        dropdown.connect("notify::selected", self.on_dropdown_selected)

        # 省略

def on_dropdown_selected(self, dropdown, gparam):
        num = dropdown.get_selected()
        print(f'番号:{num} {self.dropdown_list[num]}')

Gtk.DropDownの項目を取得する

 Gtk.DropDownの項目を取得するには、まずメソッドget_selectedを使用して、Gtk.DropDownに表示されている項目の番号を取得します。そして、取得した番号を使用して項目の情報を取得します。

def on_dropdown_selected(self, dropdown, gparam):
        num = dropdown.get_selected()
        print(f'番号:{num} {self.dropdown_list[num]}')

Gtk.StringListによりGtk.DropDownのオプションのリストを作成する

 Gtk.DropDownのオプションのリストをGtk.StringListにより作成する場合は、以下のようにします。
 1. Gtk.StringListを定義して、そこにメソッドappendを使用して値を入力する。
 2. Gtk.DropDownの定義時に、プロパティmodelに1.で作成したGtk.StringListを指定する。

        self.model = Gtk.StringList()
        moji = [
            '項目1',
            '項目2',
            '項目3',
        ]
        for data in moji:
            self.model.append(data)

        dropdown = Gtk.DropDown(model=self.model, hexpand=True)

サンプルプログラム

 以下のプログラムを実行すると、下図のようなウィンドウが表示されます。ウィンドウ内のGtk.DropDownの項目を変更すると、変更した値の番号と項目を表示します。

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


APPID = 'com.github.taniyoshima.g4_fblog2_dropdown'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='Gtk.DropDown Test',
            default_width=400, default_height=80,
        )

        box = Gtk.Box(
            margin_top=20, margin_bottom=20,
            margin_start=20, margin_end=20,
            spacing=30,
            hexpand=True, vexpand=True,
        )

        label = Gtk.Label(label='項目リスト')
        box.append(label)

        self.dropdown_list = ['項目1', '項目2', '項目3']

        dropdown = Gtk.DropDown.new_from_strings(self.dropdown_list)
        dropdown.set_hexpand(True)
        dropdown.connect("notify::selected", self.on_dropdown_selected)

        box.append(dropdown)
        self.set_child(box)

    def on_dropdown_selected(self, dropdown, gparam):
        num = dropdown.get_selected()
        print(f'番号:{num} {self.dropdown_list[num]}')


class Gtk4TestApp(Gtk.Application):

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

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


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


if __name__ == '__main__':
    main()
タイトルとURLをコピーしました