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()