2017-04-16 34 views
1

kivyでBoxLayoutを習得しようとしているときにアサーションエラーが発生しました。私は何がうまくいかなかったのか理解できません。Python/Kivyアサーションエラー

from kivy.app import App 
    from kivy.uix.button import Button 
    from kivy.uix.boxlayout import BoxLayout 

    class BoxLayoutApp(App): 
     def build(self): 
      return BoxLayout() 


    if __name__=="__main__": 
     BoxLayoutApp().run() 

そしてKVコード用:

<BoxLayout>: 
    BoxLayout: 
     Button: 
      text: "test" 
     Button: 
      text: "test" 
     Button: 
      text: "test" 
    BoxLayout: 
     Button: 
      text: "test" 
     Button: 
      text: "test" 
     Button: 
      text: "test" 

編集:提案として私は、しかし、私はまだAssertionErrorが直面BoxLayoutをサブクラス化しようとしました。私はここに再現するフル(オリジナルの)エラーメッセージ:

Traceback (most recent call last): 
    File "boxlayout.py", line 12, in <module> 
    BoxLayoutApp().run() 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\app.py", line 802, in run 
    root = self.build() 
    File "boxlayout.py", line 8, in build 
    return BoxLayout() 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\uix\boxlayout.py", line 131, in 
__init__ 
    super(BoxLayout, self).__init__(**kwargs) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\uix\layout.py", line 76, in __in 
it__ 
    super(Layout, self).__init__(**kwargs) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\uix\widget.py", line 345, in __i 
nit__ 
    Builder.apply(self, ignored_consts=self._kwargs_applied_init) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\lang\builder.py", line 451, in a 
pply 
    self._apply_rule(widget, rule, rule, ignored_consts=ignored_consts) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\lang\builder.py", line 566, in _ 
apply_rule 
    self.apply(child) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\lang\builder.py", line 451, in a 
pply 
    self._apply_rule(widget, rule, rule, ignored_consts=ignored_consts) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\kivy\lang\builder.py", line 464, in _ 
apply_rule 
    assert(rule not in self.rulectx) 
AssertionError 
+0

実際のエラーを表示するのに役立ちます。 – Keith

答えて

3

代わりにするTryサブクラスboxlayout:あなたがネストされている同じクラスにルールを適用しようとするため

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 


class MyBoxLayout(BoxLayout): 
    pass 


Builder.load_string(''' 

<MyBoxLayout>: 
    BoxLayout: 
     Button: 
      text: "test" 
     Button: 
      text: "test" 
     Button: 
      text: "test" 
    BoxLayout: 
     Button: 
      text: "test" 
     Button: 
      text: "test" 
     Button: 
      text: "test" 

''') 


class BoxLayoutApp(App): 
    def build(self): 
     return MyBoxLayout() 


if __name__=="__main__": 
    BoxLayoutApp().run() 

AssertionErrorがスローされています。
つまり、ルールをクラスに適用すると、ルール自体が含まれます。
これは問題を引き起こします。
次は同じエラーをスローします。

<MyBoxLayout>: 
    MyBoxLayout: 
+0

エラーを修正する必要がある理由を追加することができれば幸いです。 – syntonym

+0

@syntonymが更新されました – EL3PHANTEN

関連する問題