[Kivy] Spinnerの設定② Spinnerに選択肢を追加する

Spinnerへの選択肢の追加

 Spinnerの選択項目や選択肢の指定は、Kv languageとPython側の両方でおこなえます。さらに、Python側では、項目を後から追加したり、削除したりすることも可能です。

 今回は、Spinnerの選択項目の指定や選択肢の編集方法について紹介します。

今回紹介する内容
 ・ Kv languageによるSpinnerの選択項目や選択肢の指定
 ・ Python側でのSpinnerの選択項目や選択肢の指定
 ・ PythonによるSpinnerの選択肢への項目の追加と削除

Spinnerの選択項目や選択肢の指定方法

Kv languageによるSpinnerの選択項目や選択肢の指定

 Kv languageではSpinnerの選択項目はtextで指定します。また、選択肢はvaluesを使用して、以下のように記入します。

 例: 選択した項目:item1、選択肢:item 1, item 2, item 3, item 4の場合

        Spinner:
            text: 'item 1'
            values: 'item 1', 'item 2', 'item 3', 'item 4'
            on_text:
                print(f"Spinner1のテキストは、{self.text}")

Python側でのSpinnerの選択項目や選択肢の指定

 PythonファイルではSpinnerの選択項目や選択肢の記入は以下のように、対象のspinnerのtextやvaluesに値を入れることでおこないます。valuesの値は、リストで指定します。

 例: 選択項目:item1、 選択肢:item 1, item 2, item 3, item 4の場合

    def __init__(self, **kwargs):
        super(SpinnerTestWidget, self).__init__(**kwargs)

        self.ids.spinner2.text = 'item 1'
        self.ids.spinner2.values = ['item 1', 'item 2', 'item 3', 'item 4']
        self.ids.spinner2.values.append('item 5')

        self.ids.spinner3.values.remove('item 3')
        self.ids.spinner3.values.remove('item 4')

PythonによるSpinnerの選択肢への項目の追加と削除

 Spinnerの選択肢の追加や削除は、pythonのリストと同じように追加にはappend、削除にはremoveを使用します。

 例: spinner2にitem 5を追加。spinner3からitem 3, item 4を削除。

    def __init__(self, **kwargs):
        super(SpinnerTestWidget, self).__init__(**kwargs)

        self.ids.spinner2.text = 'item 1'
        self.ids.spinner2.values = ['item 1', 'item 2', 'item 3', 'item 4']
        self.ids.spinner2.values.append('item 5')

        self.ids.spinner3.values.remove('item 3')
        self.ids.spinner3.values.remove('item 4')

サンプルプログラム

 サンプルプログラムは、3つのSpinnerを表示するものです。spinner1とspinner3の選択項目及び選択肢はKv languageで指定しており、spinner2の選択項目及び選択肢はpythonで指定しています。また、spinner2では選択肢の追加、spinner3では選択肢の削除をpythonでおこなっています。

 下記の2つのファイルを同じフォルダに保存して、プログラムを実行すると下図の画面が表示されます。各spinnerを開くと、指定しておいた選択肢が表示されます。

図1: 実行すると表示される画面

図2: spinnr1(最初のspinner)を左クリックして、ドロップダウンリストを表示した画面
 spinnerの選択肢を表示した場合の例

#:kivy 2.2


<SpinnerTestWidget>:
    BoxLayout:
        size: root.size
        orientation: 'vertical'
        spacing: 20
        padding: 20
        canvas.before:
            Color:
                rgba: 0.7, 0.7, 0.7, 1
            Rectangle:
                size: self.size
                pos: self.pos

        Spinner:
            text: 'item 1'
            values: 'item 1', 'item 2', 'item 3', 'item 4'
            on_text:
                print(f"Spinner1のテキストは、{self.text}")
        
        Spinner:
            id: spinner2
            on_text:
                print(f"Spinner2のテキストは、{self.text}")

        Spinner:
            id: spinner3
            text: 'item 1'
            values: 'item 1', 'item 2', 'item 3', 'item 4'
            on_text:
                print(f"Spinner3のテキストは、{self.text}")

        Label:
# -*- coding: utf-8 -*-

import os
import re
import kivy

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.config import Config

kivy.require('2.2.0')

# 画面サイズの指定
Config.set('graphics', 'width', '500')
Config.set('graphics', 'height', '400')

Builder.load_file(os.path.dirname(__file__) + "/interface.kv")


class SpinnerTestWidget(Widget):

    def __init__(self, **kwargs):
        super(SpinnerTestWidget, self).__init__(**kwargs)

        self.ids.spinner2.text = 'item 1'
        self.ids.spinner2.values = ['item 1', 'item 2', 'item 3', 'item 4']
        self.ids.spinner2.values.append('item 5')

        self.ids.spinner3.values.remove('item 3')
        self.ids.spinner3.values.remove('item 4')


class SpinnerTestApp(App):
    def __init__(self, **kwargs):
        super(SpinnerTestApp, self).__init__(**kwargs)
        self.title = 'Label Test'

    def build(self):
        return SpinnerTestWidget()


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