gpt4 book ai didi

python - kv语言如何绑定(bind)属性?

转载 作者:行者123 更新时间:2023-12-01 02:20:05 25 4
gpt4 key购买 nike

此代码旨在显示两个 kivy slider 。第二个 slider 应与第一个 slider 一起移动(但不能相反)。我有课DoubleSlider绑定(bind)完成的位置:

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)

<DoubleSlider@BoxLayout>:
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 中)。但是我无法使用它,显示的绑定(bind)只是一个示例。

实际上,我希望能够在具有数字属性的其他对象中使用第一个 slider 的位置(不是特定于同一 DoubleSlider 对象的第二个 slider ),这意味着我将通过以下方式进行绑定(bind)情况案例在<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> 做什么?在分配方面? (我担心我没有绑定(bind)任何内容,但我只是重新分配 slider_2 属性,因为 slider_2 本身就是一个属性,而不是常规引用)

  • 绑定(bind) <UI> 中 slider 的正确方法是什么? ? (最好只使用 kv lang,除非这是不可能的)

最佳答案

如果您想在实例化期间修改绑定(bind),我不知道这是否是最佳选择,但您可以使用自定义属性。这还允许您在需要时取消绑定(bind):

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)

<DoubleSlider@BoxLayout>:
tied: False # <<<<<<<<<<
slider_1: slider_1
slider_2: slider_2
orientation: 'vertical'

Slider
id: slider_1

Slider
id: slider_2
value: slider_1.value if root.tied else self.value


<UI>:
orientation: 'vertical'
BoxLayout:
Label:
text: "Tied"
CheckBox:
on_active: ds.tied = not ds.tied

DoubleSlider:
id: ds
""")


class UI(BoxLayout):
pass


class MyApp(App):
def build(self):
return UI()


if __name__ == '__main__':
MyApp().run()

enter image description here

<小时/>

编辑:

另一个选项是创建一个与 slider 的 value 属性关联的新属性,并使用 on_ 语法:

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)

<DoubleSlider@BoxLayout>:
slider_1: slider_1
slider_2: slider_2
value1: slider_1.value
value2: slider_2.value
orientation: 'vertical'

Slider
id: slider_1

Slider
id: slider_2



<UI>:
orientation: 'vertical'

DoubleSlider:
on_value1: self.slider_2.value = self.value1

""")


class UI(BoxLayout):
pass


class MyApp(App):
def build(self):
return UI()


if __name__ == '__main__':
MyApp().run()

关于python - kv语言如何绑定(bind)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48042935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com