2016-10-06 31 views
2

私は単純なポケモンバトルシミュレーターを作成しようとしています。トレーナーにはポケモンが6個あり、リストに格納されています。私は、.kvファイルに希望の情報を表示するラベルを持っています。
私の問題は、私はPythonの変数に設定されたラベルのtextプロパティがある場合:Kivy - kv言語で作成されたウィジェットにPython関数をバインドする方法はありますか?

text: root.pokemon.getHP() 

text: '{}/{}'.format(root.pokemon.stats['cHealth'], root.pokemon.stats['Health']) 

はその後、ラベルは常に更新されますが、をPythonの関数に設定した場合ポケモンを保持しているリストがちゃんの場合にのみ、彼らはしかし、健康状態が変更されたときに更新されません

def getHP(self): 
    return '{}/{}'.format(self.stats['cHealth'], self.stats['Health']) 

:ようgetHP()機能付きged。 (例えば、ポケモンの順番が変更されます)関数を呼び出すときにバインディングを動作させる方法はありますか、またはすべての関数呼び出しを戻り値に置き換える必要がありますか?

答えて

1

それで宣言されているので、あなたがあなたの関数に統計情報を送信することができますし、結合KV LANGが自動的にバインドプロパティは:)

text: root.pokemon.getHP(root.pokemon.stats) 

統計がされるたびに発生します変更すると、関数が呼び出されます。

+0

ありがとうございます。これは、アプリケーションで空の文字列を作成する( 'blank = StringProperty( '')')ソリューションの私のハックよりはるかに優れていて、値を更新したいときはいつでもupdateBlankを呼び出します。 'def updateBlank(self、blank): self.blank = '' self.blank = ''' テキストは次のようになります: 'text:root.pokemon.getHP()+ app.blank' –

+0

@ AlexanderMacKenzieあなたはテキストのようなハックをすることもできます:[root.pokemon.getHP()、root.pokemon.stats] [0] –