前提・実現したいこと
テスト用に、kivyで簡単な画面を作っています。
これは、各classごとに開発という手法をとっています。
Python3
1from kivy.app import App 2from kivy.lang import Builder 3from kivy.properties import ObjectProperty 4 5from kivy.uix.boxlayout import BoxLayout 6 7 8Builder.load_string(''' 9 10<TestSCN>: 11 tct_p: tct_v 12 13 BoxLayout: 14 OpeParts: 15 ResultParts: 16 Label: 17 id: tct_v 18 text: 'ZZZ' 19 20<OpeParts>: 21 Label: 22 text: 'AAA' 23 24<ResultParts>: 25 rcAdd_p: rcAdd_v 26 27 Label: 28 id: rcAdd_v 29 text: 'XXX' 30 31''') 32 33 34class OpeParts(BoxLayout): 35 pass 36 37 38class ResultParts(BoxLayout): 39 rcAdd_p = ObjectProperty() 40 41 def __init__(self,**kwargs): 42 super(ResultParts, self).__init__(**kwargs) 43 self.rcAdd_p.text = 'BBB' 44 45 46class TestSCN(BoxLayout): 47 tct_p = ObjectProperty() 48 49 def __init__(self,**kwargs): 50 super(TestSCN, self).__init__(**kwargs) 51 self.tct_p.text = 'CCC' 52 53 54class TestApp(App): 55 def build(self): 56 return TestSCN() 57 58 59if __name__ == '__main__': 60 TestApp().run() 61
さて、Pythonのコードからkvファイルを使って、値を表示させることを意図していますが、このようなエラーメッセージが出て、うまく動きません。
Traceback (most recent call last): File "/home/arakawa/MyApp/01_filelist/kv19e2.py", line 60, in <module> TestApp().run() File "/usr/lib/python3/dist-packages/kivy/app.py", line 800, in run root = self.build() File "/home/arakawa/MyApp/01_filelist/kv19e2.py", line 56, in build return TestSCN() File "/home/arakawa/MyApp/01_filelist/kv19e2.py", line 50, in __init__ super(TestSCN, self).__init__(**kwargs) File "/usr/lib/python3/dist-packages/kivy/uix/boxlayout.py", line 131, in __init__ super(BoxLayout, self).__init__(**kwargs) File "/usr/lib/python3/dist-packages/kivy/uix/layout.py", line 76, in __init__ super(Layout, self).__init__(**kwargs) File "/usr/lib/python3/dist-packages/kivy/uix/widget.py", line 348, in __init__ Builder.apply(self, ignored_consts=self._kwargs_applied_init) File "/usr/lib/python3/dist-packages/kivy/lang/builder.py", line 469, in apply self._apply_rule(widget, rule, rule, ignored_consts=ignored_consts) File "/usr/lib/python3/dist-packages/kivy/lang/builder.py", line 585, in _apply_rule self._apply_rule(child, crule, rootrule) File "/usr/lib/python3/dist-packages/kivy/lang/builder.py", line 582, in _apply_rule child = cls(__no_builder=True) File "/home/arakawa/MyApp/01_filelist/kv19e2.py", line 43, in __init__ self.rcAdd_p.text = 'BBB' AttributeError: 'NoneType' object has no attribute 'text' プロセスは終了コード 1 で完了しました
ResultPartsの'BBB'を表示させたいのですが、うまくいきません。
Python(kv言語)
1 BoxLayout: 2 OpeParts: 3 ResultParts:
という書き方をやめればうまくいくと思いますが、先ほども言ったようにclassごとに開発をしたいと思っていますので、できればこの書き方を堅持したいと思っています。
この状況で、中央のLabelを'BBB'と表示させるには、どうしたらよいのでしょうか?
よろしくお願いいたします。
開発環境
Python 3.5.2 + kivy 1.10.1 + Ubuntu16.04
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/07 04:12
2018/09/07 05:04