将文本绑定到滑块值



我想创建一个控制面板,它提供了一个滑块,用于快速输入,但也提供了一个文本输入,以输入精确的值作为浮点数。另外,应该有一个标签,显示实际值。问题是,我不知道如何链接所有三个小部件彼此和自动更新他们,如果一个改变值…一切都在一个外部的。kv文件中完成。

这是我第一次尝试通过id。它可以工作,但是如果我改变滑块的值,textinput不会改变它的内容。谁有更好的办法解决我的问题?谢谢你的帮助:)

这是测试的内容。kv:

<MainLayout>:
BoxLayout:
    pos: self.parent.x + self.parent.width*0.1, self.parent.y
    orientation: 'vertical'
    BoxLayout:
        orientation: 'horizontal'
        Label:
            color: 0, 0, 0, 1
            font_size: 20 
            text: 'Position: ' + str(linear_pos_slider.value) + ' mm' 
            size: self.texture_size  
        Slider:
            id: linear_pos_slider
            orientation: 'horizontal'
            max: 50
            min: -50
            padding: 1
            value: float(linear_pos_ti.text)
            step: 0.1
        TextInput:
            id: linear_pos_ti
            size_hint: 0.2, 0.8
            font_size: 20
            text_color: 0, 0, 0, 1
            input_filter: 'float'
            multiline: 'False'
            text: '0'

下面是让应用程序运行的test.py的内容:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.slider import Slider
from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window
Window.clearcolor = (1, 1, 1, 1)

class MainLayout(BoxLayout):
    pass

class Test(App):
    def build(self):
        return MainLayout()

if __name__ == "__main__":
    Test().run()

您应该能够将它们相互绑定:

Label:
    color: 0, 0, 0, 1
    font_size: 20
    text: 'Position: ' + str(linear_pos_slider.value) + ' mm'
    size: self.texture_size
Slider:
    id: linear_pos_slider
    orientation: 'horizontal'
    max: 50
    min: -50
    padding: 1
    value: float(linear_pos_ti.text)
    step: 0.1
TextInput:
    id: linear_pos_ti
    size_hint: 0.2, 0.8
    font_size: 20
    text_color: 0, 0, 0, 1
    input_filter: 'float'
    multiline: 'False'
    text: str(linear_pos_slider.value)

尽管在实践中,如果在代码中使用NumericProperty(或StringProperty)并将它们绑定到该属性上会更好。这有所有相同的优点,但它更干净,并使您更容易从代码端访问。

注意,由于绑定是单向的(property -> widget),您需要使用on_*事件来设置它:

Slider:
    id: linear_pos_slider
    orientation: 'horizontal'
    max: 50
    min: -50
    padding: 1
    value: root.value
    on_value: root.value = self.value
    step: 0.1
TextInput:
    id: linear_pos_ti
    size_hint: 0.2, 0.8
    font_size: 20
    text_color: 0, 0, 0, 1
    input_filter: 'float'
    multiline: 'False'
    text: str(root.value)
    on_text: root.value = float(self.text)

:

from kivy.properties import NumericProperty, StringProperty
class MainLayout(BoxLayout):
    value = NumericProperty(0.0)
    pass

相关内容

  • 没有找到相关文章

最新更新