Dieser Code soll zwei kivy Schieberegler anzeigen. Der zweite Schieberegler sollte sich mit dem ersten Schieberegler bewegen (aber nicht umgekehrt). Ich habe eine Klasse DoubleSlider
wo die Bindung erfolgt:Wie bind Eigenschaften in kv Sprache?
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()
Dies ist die einzige Lösung, die ich (in kvlang) gefunden habe. Allerdings kann ich es nicht verwenden, die abgebildete Bindung ist nur eine Probe.
Eigentlich möchte ich in der Lage sein, die Position des ersten Sliders in anderen Objekten zu verwenden, die eine numerische Eigenschaft haben (nicht speziell der zweite Slider des gleichen DoubleSlider
Objekts), was bedeutet, dass ich die Bindung von Fall zu Fall mache in der <UI>
Regel. So entferne ich die Linie value: slider_1.value
und versuchte, die <UI>
Regel wie folgt zu ändern:
<UI>:
DoubleSlider:
# Is expected to be equivalent, but doesn't work
slider_2.value: slider_1.value
ich auch habe versucht getter('value')
und setter('value')
ohne Erfolg zu nutzen.
Fragen:
Was ich in
<UI>
in der Bezeichnung der assignation mache? (Ich fürchte, ich nichts binden, aber ich bin Neuzuweisung nurslider_2
Eigenschaft statt, weilslider_2
selbst eine Eigenschaft, keine reguläre Referenz)Was ist der richtige Weg, um die Schieber in
<UI>
zu binden? (Mit vorzugsweise nur kv lang, sofern dies nicht unmöglich ist)
Ihr Code scheint in Ordnung und hat den erwarteten Effekt (das Ändern von slider_1 ändert auch slider_2, aber nicht umgekehrt). – inclement
@inclement: Der Code funktioniert, aber erfüllt nicht meine Einschränkung der Bindung auf Instanzebene, und wenn sie entsprechend bearbeitet wird, funktioniert nicht mehr. – mins
Ich weiß nicht, was Sie meinen, indem Sie die Bindung auf Instanzenebene durchführen. Das würde ich als das bezeichnen, was Sie tatsächlich getan haben. – inclement