2017-08-21 11 views
-1

tuto.py無効なプロパティ名 - Kivyパイソン

import kivy 
kivy.require('1.9.0') 

from kivy.app import App 
from kivy.uix.widget import Widget 

class CustomWidget(Widget): 
    pass 

class CustomWidgetApp(App): 
    def build(self): 
     return CustomWidget() 

customwidget = CustomWidgetApp() 
customwidget.run() 

customwidget.kv

<[email protected]>: 
    font_size: 32 
    color: 0, 0, 0, 1 
    size: 150, 50 
    background_normal: '' 
    background_down: 'bt-down.png' 
    background_color: .88, .88, .88, 1 

    <CustomWidget>: 
     CustButton: 
      text: "Random" 
      pos: root.x, 200 

     CustButton: 
      text: "Buttom" 
      pos: 200, root.y 

     CustButton: 
      text: "Buttom" 
      pos: 200, 400 

私はこのコードを実行すると、私はすぐにこのエラーが出る:

... 
     7: background_color: .88, .88, .88, 1 
     8: 
>> 9: <CustomWidget>: 
     10:  CustButton: 
     11:   text: "Random" 
... 
Invalid property name 
+0

こんにちは、あなたの投稿には主にコードが含まれているようです。詳細を含めることができますか?たとえば、このコードは何をする予定ですか?あなたはどんな出力を得たいですか?あなたはすでにエラーについて何を理解していますか?これはあなた自身のコードですか、どこかからコピーしていますか? –

答えて

1

私はCustButtonをkvのButtonに変更しましたファイルを作成し、エラーを修正しました。

main.py

from kivy.app import App 
from kivy.uix.widget import Widget 


class CustomWidget(Widget): 
    pass 


class CustomWidgetApp(App): 

    def build(self): 
     return CustomWidget() 


if __name__ == '__main__': 
    CustomWidgetApp().run() 

customwidget.kv

#:kivy 1.10.0 

<CustomWidget>: 
    font_size: 32 
    color: 0, 0, 0, 1 
    size: 150, 150 
    background_color: 0.88, 0.88, 0.88, 1 
    Button: 
     text: "Random" 
     pos: root.x, 200 
    Button: 
     text: "Buttom" 
     pos: 200, root.y 
    Button: 
     text: "Buttom" 
     pos: 200, 400 
0

インデンデーションは間違っています。のは、KVファイルの先頭を見てみましょう

customwidget.kv

<[email protected]>: 
    font_size: 32 
    color: 0, 0, 0, 1 
    size: 150, 50 
    background_normal: '' 
    background_down: 'bt-down.png' 
    background_color: .88, .88, .88, 1 

<CustomWidget>: 
    CustButton: 
     text: "Random" 
     pos: root.x, 200 

    CustButton: 
     text: "Buttom" 
     pos: 200, root.y 

    CustButton: 
     text: "Buttom" 
     pos: 200, 400 
0

:これは、のようになります方法です。ルール<[email protected]>:があり、その内部にいくつかのプロパティがあります。その後、<CustomWidget>:のものがあります。最初の見た目からは、上に示唆したように間違った字下げになっているように見えますが、そのエラーがなぜpropertyであったのか見てみましょう。

KV言語パーサーは、on_構文をチェックします。それが存在しない場合、インデントされた項目はプロパティまたはWidget(またはそれを継承するクラス)のいずれかになります。パーサは、<CustomWidget>:が子として追加できるインスタンスかどうかをチェックします。

  • そうではありません、それはそれは財産だ、またはより良いCustButtonクラスの<CustomWidget>:のような名前のいくつかのプロパティがあるかどう言った場合、それはチェック

進めることができません。

  • 再び、それはそう、それがイベント、WidgetインスタンスあるいはKivyプロパティではありません

ではありません。さて、その後、不明な項目についてのエラーをスローしてみましょう:)

<[email protected]>: 
    font_size: 32 
    color: 0, 0, 0, 1 
    size: 150, 50 
    background_normal: '' 
    background_down: 'bt-down.png' 
    background_color: .88, .88, .88, 1 

    <CustomWidget>: # boom 
     CustButton: 
      text: "Random" 
      pos: root.x, 200 

     CustButton: 
      text: "Buttom" 
      pos: 200, root.y 

     CustButton: 
      text: "Buttom" 
      pos: 200, 400 

インデントが良好であればあなたは(つまりあなたの代わりに子として追加するのでCustomWidgetルールを宣言することを意図している場合)を確認することができます。その場合、ルールを最初のレベルでのみ定義することができます。したがって、<Rule>:は、それ自身の前にスペースやタブを含めてはいけません。

子として追加する場合は、最初にウィジェットの宣言が欠落しています。あなたは事前に、あなたが自分自身の内部で宣言しているルールを使用しているため、パーサーは、どちらかそれを好きではないのは<[email protected]>:

<CustomWidget>: 
    # empty 

<[email protected]>: 
    font_size: 32 
    color: 0, 0, 0, 1 
    size: 150, 50 
    background_normal: '' 
    background_down: 'bt-down.png' 
    background_color: .88, .88, .88, 1 

    CustomWidget: 
     CustButton: # boom with AssertionError 
      text: "Random" 
      pos: root.x, 200 

     CustButton: 
      text: "Buttom" 
      pos: 200, root.y 

     CustButton: 
      text: "Buttom" 
      pos: 200, 400 

上で言わせて<CustomWidget>からブラケット(<>)を削除し、そのためのルールを作成する必要があります。したがって、この例のCustButtonを既に利用可能なものに切り替える必要があります。例えば。 a Button

関連する問題