このコードは、2つのKivyスライダを表示することを目的としています。第2のスライダは、第1のスライダと一緒に移動する必要があります(ただし反対ではありません)。kv言語でプロパティをバインドする方法は?
import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
kivy.require('1.10.0')
Builder.load_string ("""
<Slider>
size_hint: 1, None
height: dp(40)
<[email protected]>:
slider_1: slider_1
slider_2: slider_2
orientation: 'vertical'
Slider
id: slider_1
Slider
id: slider_2
value: slider_1.value
<UI>:
orientation: 'vertical'
DoubleSlider:
""")
class UI(BoxLayout):
pass
class MyApp(App):
def build(self):
return UI()
if __name__ == '__main__':
MyApp().run()
これは(kvlangで)私が見つけた唯一の解決策は次のとおりです。私は、バインディングが行われているクラスDoubleSlider
をしました。しかし、私はそれを使用することはできません、示されているバインディングはサンプルです。
実際には、数値プロパティ(同じDoubleSlider
オブジェクトの2番目のスライダではありません)を持つ他のオブジェクトでも最初のスライダの位置を使用できるようにしたいと思います。 <UI>
ルールのだから私はラインvalue: slider_1.value
を削除して、このような<UI>
ルール変更しようとした:
<UI>:
DoubleSlider:
# Is expected to be equivalent, but doesn't work
slider_2.value: slider_1.value
私も無駄にgetter('value')
とsetter('value')
を使用しようとしましたが。
質問:
私が逢引の用語で
<UI>
で何をしているのですか? (slider_2
は財産ではなく、定期的に参照そのものであるので、私は何も結合していない恐れて、私はちょうど代わりslider_2
プロパティを再割り当てしています)<UI>
にスライダーをバインドする適切な方法は何ですか?あなたがインスタンス化中綴じ変更したい場合は、それが最良の選択肢だかどうかは知りませんが、カスタムプロパティを使用することができ、
あなたのコードはうまく見えますが、期待される効果があります(slider_1を変更するとslider_2も変更されますが、その逆もありません)。 – inclement
@inclement:コードは機能しますが、インスタンスレベルでバインディングを行うという私の制約を満たしておらず、それに応じて編集しても機能しなくなります。 – mins
私は、インスタンスレベルでバインディングを行うことで何を意味するのか分かりません。それが私があなたが実際にやったことです。 – inclement