이 코드는 두 개의 kivy 슬라이더를 표시하기위한 것입니다. 두 번째 슬라이더는 첫 번째 슬라이더와 함께 움직여야합니다 (반대가 아닙니다).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
개체의 두 번째 슬라이더가 아닌)이있는 다른 다른 개체에서 첫 번째 슬라이더의 위치를 사용할 수 있기를 원합니다. 즉, 대소 문자 구분을 할 것입니다. <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>
에서 무엇을하고 무엇을
?
<UI>
에서 슬라이더를 결합하는 적절한 방법은 무엇입니까 (slider_2
자체가 속성이 아닌 일반 참조이기 때문에, 나는 아무것도 결합하지 두려워하지만, 난 그냥 대신slider_2
속성을 재 할당하고있어)? 당신이 인스턴스화하는 동안 바인딩을 수정하려면 그것이 최선의 선택인지는 모르겠지만, 사용자 정의 속성을 사용할 수 있습니다,
코드가 잘 보이고 예상되는 효과가 있습니다 (slider_1을 변경하면 slider_2도 변경되지만 반대의 경우도 마찬가지입니다). – inclement
@inclement : 코드는 작동하지만 인스턴스 수준에서 바인딩을 수행하는 것에 대한 제 제약 조건을 충족하지 않으며 그에 따라 편집하면 더 이상 작동하지 않습니다. – mins
인스턴스 수준에서 바인딩을 수행하면 무슨 뜻인지 알 수 없습니다. 그게 내가 네가 실제로 한 일이야. – inclement