ご質問内容
kivy初心者です。
画面にnormalという文字を表示させるコードなのですが、以下2通りの方法で試しました。
ここで「該当のソースコード①」のMyRoot
クラスにて、親クラスの呼び出し
super(MyRoot, self).__init__(**kwargs)
は、何故必要なのでしょうか。
※上記コードの役目を理解したかったため、「該当のソースコード②」で試しました。
エラー(ウィンドウが立ち上がりすぐに消える)が発生しますが、根本的なkivyの仕組みが理解できておらず、いまいち上記コードの役目が理解できません。
エラーコード:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:xxxxxxxx\kivy\app.py", line 800, in run root = self.build() File "<stdin>", line 3, in build TypeError: __init__() should return None, not 'BoxLayout'
お手数ですが、分かる方がいらっしゃいましたら、教えて下さい。
該当のソースコード①(成功)
python
1from kivy.app import App 2from kivy.uix.boxlayout import BoxLayout 3from kivy.uix.button import Button 4from kivy.uix.label import Label 5 6class MyRoot(BoxLayout): 7 def __init__(self, **kwargs): 8 super(MyRoot, self).__init__(**kwargs) 9 lbl = Label(text='normal') 10 self.add_widget(lbl) 11 12class Renshu(App): 13 def build(self): 14 return MyRoot() 15 16Renshu().run()
該当のソースコード②(失敗)
python
1from kivy.app import App 2from kivy.uix.boxlayout import BoxLayout 3from kivy.uix.button import Button 4from kivy.uix.label import Label 5 6class MyRoot(BoxLayout): 7 def __init__(self, **kwargs): 8 layout = BoxLayout() #変更箇所 9 lbl = Label(text='normal') 10 layout.add_widget(lbl) 11 return layout #追加箇所 12 13class Renshu(App): 14 def build(self): 15 return MyRoot() 16 17Renshu().run()
補足(新たに試したコード)
※
super(MyRoot, self).__init__(**kwargs) ```を使わなかった場合 ```python from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label class MyRoot(BoxLayout): def __init__(self, **kwargs): self.layout = BoxLayout() self.lbl = Label(text='LLL') self.layout.add_widget(self.lbl) class Renshu(App): def build(self): L = MyRoot() return L.layout Renshu().run()

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/27 09:51
2019/05/27 11:34 編集
2019/05/27 11:17
退会済みユーザー
2019/05/27 11:28
2019/05/27 12:37
退会済みユーザー
2019/05/28 03:56