私は多くのラベルを使用するkivyのアプリケーションを持っています。リストから値を取得することは可能ですか?例えば(ただしこれは機能しません)キビのラベルのリストを使うことは可能です
Label:
text:root.label_value[0]
Label:
text:root.label_value[1]
私は多くのラベルを使用するkivyのアプリケーションを持っています。リストから値を取得することは可能ですか?例えば(ただしこれは機能しません)キビのラベルのリストを使うことは可能です
Label:
text:root.label_value[0]
Label:
text:root.label_value[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()
はい、できます。リストには、あらゆる種類のオブジェクトを保持することができます。次のコードを考えてみましょう:
ここでは、10個のラベルを含むリストがリスト内にテキストとして含まれています。リストを作成したら、通常どおりにアクセスできます。次のコードでは、前の例のラベルを使用し、グリッドレイアウトに追加します。
layout = GridLayout(cols=1)
for item in labels:
layout.add_widget(item)
これはあなたの質問に答えてくれることを願っています。
可能な答えがありますが、私はこれがうまくいけば、よりきれいおよび/または効率的な方法、あなた別に表示されます願っています。
子供は、このように動作するオブジェクトのリストすなわち<widget>.children
に存在しているとして、それが別のウィジェットに追加されます各ウィジェット:
<widget>.children = [last_added, added before the `last_added` one, etc...]
あなたが任意の追加を必要としないこの方法ではあなたのウィジェットの値を取得/設定するための変数。あなたは、単にkv
ファイルにid
を設定するか、またはあなたがこれを行うことができるように変数で使用できる親オブジェクト(ウィジェット)を持つことができます
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
クラスの追加プロパティを使用して、から簡単に。
ありがとうYoav。それは私が探していたものです – Psionman
なぜリストは2回宣言されましたか? – Guglie
@Guglie 2番目の行は、値を変更してビューを更新できることだけです。その** ** 2番目の宣言はありません... –