2016-06-14 5 views

答えて

1

はい、簡単な例

from kivy.app import App 

from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 
from kivy.properties import ListProperty 


Builder.load_string(""" 
<Test>: 
    Label: 
     text:root.label_value[0] 
    Label: 
     text:root.label_value[1] 
""") 

class Test(BoxLayout): 

    label_value = ListProperty(["crazy", 'cheese']) 

    def __init__(self, **kw): 
     super(Test, self).__init__(**kw) 
     self.label_value = ["crazy2", 'cheese2'] 





class TestApp(App): 
    def build(self): 
     return Test() 

TestApp().run() 
+0

ありがとうYoav。それは私が探していたものです – Psionman

+0

なぜリストは2回宣言されましたか? – Guglie

+1

@Guglie 2番目の行は、値を変更してビューを更新できることだけです。その** ** 2番目の宣言はありません... –

1

はい、できます。リストには、あらゆる種類のオブジェクトを保持することができます。次のコードを考えてみましょう:

ここでは、10個のラベルを含むリストがリスト内にテキストとして含まれています。リストを作成したら、通常どおりにアクセスできます。次のコードでは、前の例のラベルを使用し、グリッドレイアウトに追加します。

layout = GridLayout(cols=1) 
for item in labels: 
    layout.add_widget(item) 

これはあなたの質問に答えてくれることを願っています。

1

可能な答えがありますが、私はこれがうまくいけば、よりきれいおよび/または効率的な方法、あなた別に表示されます願っています。

子供は、このように動作するオブジェクトのリストすなわち<widget>.childrenに存在しているとして、それが別のウィジェットに追加されます各ウィジェット:

<widget>.children = [last_added, added before the `last_added` one, etc...] 

あなたが任意の追加を必要としないこの方法ではあなたのウィジェットの値を取得/設定するための変数。あなたは、単にkvファイルにidを設定するか、またはあなたがこれを行うことができるように変数で使用できる親オブジェクト(ウィジェット)を持つことができます

@Alanが不要な変数なし目的とが、どのような基本的
print my_parent.children[0].text 
print self.ids.my_parent.children[0].text 

- することができますforでそれらを追加し、後で既存のリストからアクセスしてください。

@ Yoavは__init__に設定しますが、あなたはそのリストに依存しています。つまり、別のLabelを追加すると、そのリストを更新する必要があります。あるいは、別の機能のon_label_value()は、長さをチェックして新しいウィジェットを追加したり、ウィジェットif len(new_label_value) != len(label_value)またはそれに類するものを削除したり、新しいものがリストの古い長さに等しい場合は何もしません。そして、これは大規模に物事を複雑にするだけです。

(ネストされた)ウィジェットがたくさんある場合、ステートメントはの長さがになりますが、短くする方法があります。あなたがオブジェクトを保存するので、あなたがそれにアクセスすることができ、あなたがどこかにアクセスしたい、あなたはほとんど何にアクセスすることができます。このように

# python 
app = App.get_running_app() 
app.my_parent = self 

# kv 
app.my_parent # because in kv you have access to `App` with `app` keyword 

ObjectProperty使用し、KVでそれを設定するかのようなAppクラスの追加プロパティを使用して、から簡単に。

関連する問題