2016-10-13 6 views
0

KVファイル内のウィジェットのブロック(小文字のみのルール)を複製​​し、その示したように、私は、3 GridLayoutsが含まれていhorizo​​ntial BoxLayoutを持つ小さなアプリケーションを作成する方法:私がどのように動作するかkivy .kvファイル理解しようと

my_widget: 

<[email protected]>: 
    orientation: "horizontal" 

    GridLayout: 
     rows: 3 
     ToggleButton: 
     Image: 
     Label: 

    GridLayout: 
     rows: 3 
     ToggleButton: 
     Image: 
     Label: 

    GridLayout: 
     rows: 3 
     ToggleButton: 
     Image: 
     Label: 

そこに問題はありませんが、ウィジェットの同じブロックがあるので(GridLayouts)は複製できますか?私は次のようなものを試しました:https://kivy.org/docs/api-kivy.lang.html

my_widget: 

[[email protected]]: 
    rows: 3 
    ToggleButton: 
    Image: 
    Label: 

<[email protected]>: 
    orientation: "horizontal" 

    my_widget2: 
    my_widget2: 
    my_widget2: 

しかし、動作しませんでした。複製が可能な場合は、ブロック内の各ウィジェットにどのように情報を渡すことができますか?

答えて

1

ええ、これは私が遭遇するたびにひどくなります。 に&という単語を貼り付けてください(大文字は忘れてしまいます)。私はそれがバグやフィーチャーとして扱わなければならないのだろうかと疑問に思います。ウィジェットに正しいスタイル/ケースでウィジェットの名前を付ける必要があるからです。

事はKV言語でウィジェット/ルールはThisWordStyleまたは類似のものを使用しなければならないということですが、最初資本手紙は重要のようです。単語内の大文字で十分で、残りは小文字でも、悲しいことに再現できない場合もあった。小文字と

言葉は、ほとんどのプロパティまたは変数として使用されているので、多分my_widgetはあまりにglobalのようなプロパティや変数として扱われた、または言語パーサを介して実行時に完全に無視されました。

見てみましょう:

1)あなたのKVのレイアウトアプリに置く:

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.boxlayout import BoxLayout 
Builder.load_string(''' 
<[email protected]>: 
    my_widget2: 
    Button: 
     text: 'bla' 

<MyWidget>: 
    my_widget: 
    Button: 
     text: 'bad' 

<[email protected]>: 
    rows: 3 
    ToggleButton: 
    Image: 
    Label: 

''') 
class MyWidget(BoxLayout): 
    pass 

class Test(App): 
    def build(self): 
     return MyWidget() 
Test().run() 

しか見え事はButton'bad'を持つ文字列

2)の命名にはほとんど変化になります - my_widget - >My_widget

<[email protected]>: 
    my_widget2: 
    Button: 
     text: 'bla' 

<MyWidget>: 
    My_widget: 
    Button: 
     text: 'bad' 

<[email protected]>: 
    rows: 3 
    ToggleButton: 
    Image: 
    Label: 

と表示されているウィジェットがもう1つあります!

3)すべてのもの(my_widget2で働いレイアウト - >My_widget2

<[email protected]>: 
    My_widget2: 
    My_widget2: 
    Button: 
     text: 'bla' 

<MyWidget>: 
    My_widget: 
    Button: 
     text: 'bad' 

<[email protected]>: 
    rows: 3 
    ToggleButton: 
    Image: 
    Label: 

また、そのようなウィジェットへ引数を渡す答えるために(<[email protected]>)、そのようなウィジェットにアクセスするためにFactoryを使用し、それだけで(キロワットを渡しています)args:

#:import Factory kivy.factory.Factory 
<MyWidget>: 
    Button: 
     on_release: root.add_widget(Factory.My_widget2(text='hi')) 

<[email protected]>: 
    size_hint: [None, None] 
    size: [200, 50] 
+0

あなたは大文字 - 小文字の名前について正しくありました。すべてを大文字に変更した後、正常に動作しました。しかし、「Factory」は全く動かないので、「hi」という引数をLabelウィジェットに渡すことはできません。ありがとうございました。 – user3060854

+0

@ user3060854 Factoryの例を編集して、Labelから継承した単純なウィジェットをこのように追加しました。今は明らかですか? – KeyWeeUsr

+1

はい、より明確です、ありがとうございます。 – user3060854

関連する問題