

「テキスト変更」ボタンを押したときに「Oneクラスのlabel_change」を実行したいのですが、下記のコードだと「TypeError:
'kivy.properties.DictProperty' object is not subscriptable」というエラーが返ってきてしまいます。  
何処が間違っているのでしょうか？プログラミング初心者のためエラー内容を見ても全くわかりませんでした・・・。申し訳ないのですがどなたか正しい記述方法を教えていただけないでしょうか。  
.kvファイルを書き換えて「Baseクラスのlabel_change」を実行した場合は上手く働きます。

.py

[code]

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    
    class Base(BoxLayout):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
    
        def label_change(self):
            self.ids["info"].text = "A"
    
    class One(object):
        def __init__(self, age="15", sex="Female"):
            self.age = age
            self.sex = sex
    
        def label_change(self):
            MainFrame.ids["info"].text = "A"
    
    ～～省略～～
    
[/code]

.kv

[code]

    #:import One __main__.One
    
    <Base>:
        orientation: "vertical"
        Label:
            id: info
            text: "label"
        BoxLayout:
            Button:
                text: "テキスト変更"
                on_press: One().label_change()
    
[/code]


CC BY-SA 3.0
2018-02-04T12:22:54.823
41456
2022-03-16T14:07:10.717
2018-07-31T13:38:07.897
19110
27275
question
python python3 kivy
Python・Kivy object is not subscriptableの解決方法。


コードが省略されてしまっているのでよくわからないのですが、  
たぶん、MainFrameクラスがAppクラスを継承して実際にrunしているのでしょうか？  
可能であれば、すべてのコードを記載してくださると、アドバイスできるかと思います。

ただこの内容ですとエラーの内容は、MainFrame.ids["info"].textの配列がないというエラーかと思います。  
KVファイルのidの内容ですのでチュートリアルのPong Gameのidを見返されるといいかと思います

日本語訳：<https://pyky.github.io/kivy-doc-ja/tutorials/pong.html#adding-ball-
animation>


CC BY-SA 3.0
2018-02-09T15:12:58.820
41618
2018-02-09T15:12:58.820
27350
41456
answer