python初心者で、kivyを触るのは初めてです。
練習にkivyで簡単なアプリを作っています。
ボタンウィジェットからメインの関数を呼び出し、
その関数の中でKVファイル内で作ったウィジェットに対して操作をしたいです。
今のテスト段階では、ボタンを押すとラベルのテキストを変える、というだけです。
ここでは、0のボタンを押すとid:type1のtextを0にする、という操作がしたいのですが、
AttributeError: 'MainScreen' object has no attribute 'type1'
ということで呼び出せません。
基本的なことが分かってないと思うのですが、ご教示お願いします。
※追記
色々調べたところ、idはインスタンス名ではない、ということは何となく理解できたのですが、
self.ids.xx を使った書き方や、プロパティを追加する?やり方があるようですが、
結局どのように解決するのがいいのかにたどり着けていません。
また別のやり方として、
クラス変数に文字列をもって、type1のラベルがそれを参照するようにしている例を見つけたのですが、
変数の内容が変わったら表示が更新される理由がわかりませんでした。
python
1 2class MainScreen(BoxLayout): 3 def __init__(self, **kwargs): 4 super().__init__(**kwargs) 5 def select_type(self, number): 6 self.type1.text=number 7 8class TestApp(App): 9 def build(self): 10 MS = MainScreen() 11 return MS 12 13if __name__=="__main__": 14 TestApp().run()
KV
1<MainScreen>: 2 3 BoxLayout: 4 orientation: 'vertical' 5 Label: 6 id:"type1" 7 text:"-" 8 size_hint_y:1 9 Label: 10 id:"type2" 11 text:"-" 12 size_hint_y:1 13 BoxLayout: 14 size_hint_y:0.5 15 Button: 16 text:"0" 17 on_press: root.select_type(self.text) 18 Button: 19 text:"1" 20 Button: 21 text:"2" 22 Button: 23 text:"3"
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。