回答編集履歴
1
追記
test
CHANGED
@@ -1 +1,27 @@
|
|
1
1
|
widgetにKv言語で書かれた物を反映させるには、widgetのinstanceを作る前にKv言語のコードを読み込ませないといけないです。TestAppクラスが自身の名前を元に`test.kv`を読みに行くのは`TestApp().run()`の中([この部分](https://github.com/kivy/kivy/blob/372b81964f55d2ca74641944ab8c908172306e59/kivy/app.py#L799))なので、`TestApp().run()`を呼ぶ前に作った`MenuScreen`と`SettingsScreen`のinstanceはKv言語で書かれた定義が無い状態になりますね。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
なので最初の失敗例を正しく動作させるには`MenuScreen`と`SettingsScreen`のinstanceを作る前に以下のように明示的にKv言語のコードを読み込めばいいです。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
```python
|
10
|
+
|
11
|
+
from kivy.lang import Builder
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
Builder.load_file('test.kv')
|
16
|
+
|
17
|
+
sm = ScreenManager()
|
18
|
+
|
19
|
+
sm.add_widget(MenuScreen(name='menu'))
|
20
|
+
|
21
|
+
sm.add_widget(SettingsScreen(name='settings'))
|
22
|
+
|
23
|
+
```
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
(このやり方の場合、`test.kv`は別の名前に変えたほうがいいかもしれないです。)
|