再びすみません。
テスト用に、kivyで簡単な画面を作っています。
これは、各classごとに開発という手法をとっています。
Python3
1from kivy.app import App 2from kivy.lang import Builder 3 4from kivy.uix.boxlayout import BoxLayout 5from kivy.uix.screenmanager import ScreenManager, Screen 6from kivy.properties import ObjectProperty 7from kivy.clock import Clock 8 9from kivy.core.text import LabelBase, DEFAULT_FONT 10from kivy.resources import resource_add_path 11 12Builder.load_string(''' 13<ResultParts> 14 ls_p: ls_v 15 Label: 16 id: ls_v 17 18<AllSCN>: 19 name: 'all' 20 us_p: us_v 21 22 BoxLayout: 23 orientation: 'vertical' 24 25 BoxLayout: #OpnSCN 26 Label: 27 id: us_v 28 BoxLayout: #ResultSCN 29 size_hint_y: 0.9 30 ResultParts: 31''') 32 33sm = ScreenManager() 34 35class ResultParts(BoxLayout): 36 ls_p = ObjectProperty() 37 38 def __init__(self, **kwargs): 39 super(ResultParts, self).__init__(**kwargs) 40 41 42class AllSCN(Screen): 43 us_p = ObjectProperty() 44 45 def __init__(self, **kwargs): 46 super(AllSCN, self).__init__(**kwargs) 47 48 def begin_display(self, dt): 49 self.us_p.text = 'AAA' 50 ResultParts.ls_p.text = 'BBB' 51 52 53 54class TestApp(App): 55 def build(self): 56 allscn = AllSCN() 57 58 Clock.schedule_once(allscn.begin_display, 0) 59 60 sm.add_widget(allscn) 61 62 return sm 63 64 65if __name__ == '__main__': 66 TestApp().run() 67
さて、AllSCNからResultPartsを経由して、下側のラベルに値'BBB'を出そうとしていたのですが、こんなエラーメッセージが出てしまいました。
Traceback (most recent call last): File "/home/arakawa/MyApp/01_filelist/kv19f.py", line 66, in <module> TestApp().run() File "/usr/lib/python3/dist-packages/kivy/app.py", line 826, in run runTouchApp() File "/usr/lib/python3/dist-packages/kivy/base.py", line 502, in runTouchApp EventLoop.window.mainloop() File "/usr/lib/python3/dist-packages/kivy/core/window/window_sdl2.py", line 727, in mainloop self._mainloop() File "/usr/lib/python3/dist-packages/kivy/core/window/window_sdl2.py", line 460, in _mainloop EventLoop.idle() File "/usr/lib/python3/dist-packages/kivy/base.py", line 337, in idle Clock.tick() File "/usr/lib/python3/dist-packages/kivy/clock.py", line 581, in tick self._process_events() File "kivy/_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events (kivy/_clock.c:7839) File "kivy/_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events (kivy/_clock.c:7597) File "kivy/_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events (kivy/_clock.c:7519) File "kivy/_clock.pyx", line 167, in kivy._clock.ClockEvent.tick (kivy/_clock.c:3258) File "/home/arakawa/MyApp/01_filelist/kv19f.py", line 50, in begin_display ResultParts.ls_p.text = 'BBB' AttributeError: 'kivy.properties.ObjectProperty' object has no attribute 'text' プロセスは終了コード 1 で完了しました
すでにインスタンスはできているはずなので、AllSCNの子のResultPartsにはアクセスできる気がしていたのですが、それができません。
AllSCNの子にResultPartsを設けるという構造は、できるだけ堅持したいのですが、どなたか教えていただけませんでしょうか?
開発環境
Python 3.5.2 + kivy 1.10.1 + Ubuntu16.04
ありがとうございましした。
ただ、試してみたのですが、まだうまくいきません。
あれからいろいろ当方でも試してみたのですが、いまだに'BBB'を出すことができません。
Python3
1from kivy.app import App 2from kivy.lang import Builder 3 4from kivy.uix.boxlayout import BoxLayout 5from kivy.uix.screenmanager import ScreenManager, Screen 6from kivy.properties import ObjectProperty 7from kivy.clock import Clock 8 9from kivy.core.text import LabelBase, DEFAULT_FONT 10from kivy.resources import resource_add_path 11 12Builder.load_string(''' 13<ResultParts> 14 ls_p: ls_v 15 Label: 16 id: ls_v 17 text: 'XXX' 18 19<AllSCN>: 20 name: 'all' 21 us_p: us_v 22 23 BoxLayout: 24 orientation: 'vertical' 25 26 BoxLayout: #OpnSCN 27 Label: 28 id: us_v 29 BoxLayout: #ResultSCN 30 size_hint_y: 0.9 31 ResultParts: 32''') 33 34sm = ScreenManager() 35 36class ResultParts(BoxLayout): 37 ls_p = ObjectProperty() 38 39 def __init__(self, **kwargs): 40 super(ResultParts, self).__init__(**kwargs) 41 Clock.schedule_once(self._once_after_init) 42 43 def _once_after_init(self, dt): 44 self.ls_p.text = 'before' 45 pass 46 47 def display(self): 48 print('ResultParts display:',self.linked) 49 self.ls_p.text = 'koteichi' 50 pass 51 52 53class AllSCN(Screen): 54 us_p = ObjectProperty() 55 56 def __init__(self, **kwargs): 57 super(AllSCN, self).__init__(**kwargs) 58 59 def on_pre_enter(self): 60 self.us_p.text = 'AAA' 61 rp = ResultParts() 62 rp.ls_p.text = 'BBB' 63 rp.linked = 'QQQ' 64 rp.display() 65 66 67class TestApp(App): 68 def build(self): 69 #allscn = AllSCN() 70 71 #Clock.schedule_once(allscn.begin_display, 0) 72 73 sm.add_widget(AllSCN()) 74 75 return sm 76 77 78if __name__ == '__main__': 79 TestApp().run() 80
この場合だと、下段に'koteichi'が出そうなものですが、実際には'before'がでてしまいました。
どうしたらよいのでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/15 02:26
2018/09/15 03:02
退会済みユーザー
2018/09/15 03:15 編集
退会済みユーザー
2018/09/15 05:11 編集