前提・実現したいこと
PythonとKivyを使い、次のようなことがしたいのですが、どうすればいいか全くわかりません。
1:要素が文字列の任意のリスト(str_list)を用意する。
2:そのリスト内の文字列ひとつ一つに対してボタンを作り、ScrollView内に並べる。
3:i番目のボタンを押した時、すなわちstr_list[i]というボタンを押した際、int型変数nにiを代入したい。
(例えば、greenというボタンを押したら、nに3が代入されていて欲しいです)
2番目まではネットで検索した様々なやり方を、原理が分からないまま貼り合わせることでなんとか満足のいくところまで来ました。しかし3番目についてはどうやったらいいのかわかりません。
どのようにすれば実現できるのでしょうか?どなたかわかる方が居れば、ご教授願います。
また、プログラミングをはじめて一ヶ月ほどの初学者ですので、わからないことが多いのですがよろしくお願い致します。
該当のソースコード
sample.py
Python
1from kivy.app import App 2from kivy.uix.button import Button 3from kivy.uix.screenmanager import Screen 4from kivy.utils import get_color_from_hex 5 6n=0 7 8str_list=['red','blue','yellow','green','orenge','purple','black','white','grey','brown','gold','carmine','ivory','indigo'] 9 10class Edit(Screen): 11 def __init__(self, **kwargs): 12 super().__init__(**kwargs) 13 14 for i in range(len(str_list)): 15 btn = Button(text=str_list[i],size_hint_y=None,height=100, 16 font_size=32,color=(1,1,1,1), 17 background_normal='',background_down='', 18 background_color=get_color_from_hex("#1a97f0")) 19 btn.fbind('on_press',self.pressbtn) 20 self.ids.scroll.add_widget(btn) 21 22 def pressbtn(self,object): 23 print(object) 24 25class SampleApp(App): 26 def build(self): 27 return Edit() 28 29if __name__ == '__main__': 30 SampleApp().run() 31
sample.kv
KivyLang
1<Blank@Label>: 2 canvas.before: 3 Color: 4 rgba: 1,1,1,1 5 Rectangle: 6 pos: self.pos 7 size: self.size 8 9<Edit> 10 BoxLayout: 11 orientation: "vertical" 12 13 Blank: 14 15 BoxLayout: 16 size_hint_y: 15 17 18 Blank: 19 20 ScrollView: 21 size_hint_x: 3 22 BoxLayout: 23 id: scroll 24 size_hint_y: None 25 orientation: "vertical" 26 height: self.minimum_height 27 28 Blank: 29 30 Blank:
補足情報
OS : macOS10.15.3
Python : 3.4.7
Kivy : 1.11.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。