Spinnerの自作¶
自己流の Spinner の作成を助ける mix-in class。
(Tested on CPython3.9.7 + Kivy2.1.0)
公式のSpinnerとの違い¶
公式の Spinner の基底classは Button であるため Buttonの見た目が気に入らない人はそれを変えるための手間が僅かですがかかります。 対して
KXSpinnerLikeBehavior
の方は見た目に関しては何も行いません。また公式の方は
kivy.uix.spinner.Spinner.option_cls
がtext
という名前のプロパティを持っている事を求めますがこちらは求めません。
使い方¶
最初にすべきは on_release
eventを持っているclassとKXSpinnerLikeBehaviorを組み合わせて本体側classを作ることです。
以下に幾つか例を示します。
class CustomSpinner(KXSpinnerLikeBehavior, Button):
...
class CustomSpinner(KXSpinnerLikeBehavior, ButtonBehavior, Image):
...
class CustomSpinner(KXSpinnerLikeBehavior, ButtonBehavior, BoxLayout):
...
次に選択肢を表すclassを定義します。
これは先程述べたように text
プロパティが無くとも良い事を除けば kivy.uix.spinner.Spinner.option_cls
と同じです。
class SpinnerOption(ButtonBehavior, Image):
...
class SpinnerOption(ButtonBehavior, BoxLayout):
...
定義できたら本体側classのinstanceに伝えます。
spinner = CustomSpinner()
spinner.option_cls = SpinnerOption
最後に選択肢のデータを spinner
に渡します。
データの形式は kivy.uix.recycleview.RecycleView.data
と全く同じです。
すなわち option_cls
のproperty名に対応したkeyを持つ辞書のlistです。
# option_clsが規定値のままの時の一例
spinner.option_data = [
{'text': text, } for text in "ACBDEF"
]
ユーザーがどの選択肢を選んだのかは selection
を監視することでわかります。
spinner.bind(selection=lambda __, v: print(v.text, "が選ばれた"))
- class kivyx.uix.behaviors.spinner.KXSpinnerLikeBehavior(**kwargs)[source]¶
Bases:
object
- auto_select = None¶
何も選ばれていない時
auto_select
番目の選択肢が自動で選ばれる。
- dropdown_cls¶
公式と同じ。
- option_cls¶
text
プロパティが要らない事を除けば公式と同じ。
- option_data¶
- option_padding = [0, 0, 0, 0]¶
選択肢とその入れ物間の隙間。
kivy.uix.boxlayout.BoxLayout.padding
に対応。
- option_spacing = [0, 0]¶
選択肢同士の隙間。
kivy.uix.boxlayout.BoxLayout.spacing
に対応。
- selection = None¶
(read-only) 現在選ばれている選択肢(
option_cls
のinstance)。
- sync_height = False¶
公式と同じ。