如何将 NumericProperty 的值绑定到标签的文本?
How to bind the value of a NumericProperty to the Text of a Label?
使用 Kivy,我知道我们可以将标签的 text
设置为 StringProperty()
对象,这样每当该字符串更新时,标签就会自动显示更新后的文本。
我的最小示例代码运行良好,将在一秒后显示“apple”,然后显示“banana”:
#test.kv
<MyLabel>:
font_size: 30
text: self.examppleStringProperty
#test.py
class MyLabel(Label):
examppleStringProperty = StringProperty("apple")
def on_kv_post(self, base_widget):
Clock.schedule_interval(lambda dt : self.runlater(), 1)
def runlater(self):
self.examppleStringProperty = "banana"
class TestApp(App):
def build(self): return MyLabel()
问题:我如何做完全相同的事情,但对于 Float?即每当 Float 的值发生变化时,让标签自动更新下一个?
我有一个用当前室温更新 Float 值的模块,我只想在 Kivy 的标签上显示它,但我不确定如何“自动”绑定它。
我试过 NumericProperty()
,但当然我不能将 label.text
设置为 NumericProperty() 对象,因为它不是字符串。
例如,以下代码不起作用,根本不会将标签文本更新为数字 42,因为 NumericProperty
无论如何都没有绑定到标签文本。
class MyLabel(Label):
examppleStringProperty = StringProperty("apple")
exampleNumericProperty = NumericProperty(0)
def on_kv_post(self, base_widget):
self.text = str(self.exampleNumericProperty)
Clock.schedule_interval(lambda dt : self.runlater(), 1)
def runlater(self):
self.exampleNumericProperty = 42
class TestApp(App):
def build(self): return MyLabel()
只是在寻找任何好的方法来保持标签自动更新为浮点数的当前值..
我找到了一种方法(用 Float 的值更新 label.text),方法是使用“on_NumericProperty”函数。
但我将不胜感激任何建议,无论这是好设计还是坏设计 - 或者任何建议的替代方案。
class MyLabel(Label):
exampleStringProperty = StringProperty("no data yet")
exampleNumericProperty = NumericProperty(0)
def on_exampleNumericProperty(self, *args):
self.exampleStringProperty = str(self.exampleNumericProperty)
def on_kv_post(self, base_widget):
Clock.schedule_interval(lambda dt : self.runlater(), 3)
def runlater(self):
self.exampleNumericProperty = 42
class TestApp(App):
def build(self): return MyLabel()
使用 Kivy,我知道我们可以将标签的 text
设置为 StringProperty()
对象,这样每当该字符串更新时,标签就会自动显示更新后的文本。
我的最小示例代码运行良好,将在一秒后显示“apple”,然后显示“banana”:
#test.kv
<MyLabel>:
font_size: 30
text: self.examppleStringProperty
#test.py
class MyLabel(Label):
examppleStringProperty = StringProperty("apple")
def on_kv_post(self, base_widget):
Clock.schedule_interval(lambda dt : self.runlater(), 1)
def runlater(self):
self.examppleStringProperty = "banana"
class TestApp(App):
def build(self): return MyLabel()
问题:我如何做完全相同的事情,但对于 Float?即每当 Float 的值发生变化时,让标签自动更新下一个?
我有一个用当前室温更新 Float 值的模块,我只想在 Kivy 的标签上显示它,但我不确定如何“自动”绑定它。
我试过 NumericProperty()
,但当然我不能将 label.text
设置为 NumericProperty() 对象,因为它不是字符串。
例如,以下代码不起作用,根本不会将标签文本更新为数字 42,因为 NumericProperty
无论如何都没有绑定到标签文本。
class MyLabel(Label):
examppleStringProperty = StringProperty("apple")
exampleNumericProperty = NumericProperty(0)
def on_kv_post(self, base_widget):
self.text = str(self.exampleNumericProperty)
Clock.schedule_interval(lambda dt : self.runlater(), 1)
def runlater(self):
self.exampleNumericProperty = 42
class TestApp(App):
def build(self): return MyLabel()
只是在寻找任何好的方法来保持标签自动更新为浮点数的当前值..
我找到了一种方法(用 Float 的值更新 label.text),方法是使用“on_NumericProperty”函数。
但我将不胜感激任何建议,无论这是好设计还是坏设计 - 或者任何建议的替代方案。
class MyLabel(Label):
exampleStringProperty = StringProperty("no data yet")
exampleNumericProperty = NumericProperty(0)
def on_exampleNumericProperty(self, *args):
self.exampleStringProperty = str(self.exampleNumericProperty)
def on_kv_post(self, base_widget):
Clock.schedule_interval(lambda dt : self.runlater(), 3)
def runlater(self):
self.exampleNumericProperty = 42
class TestApp(App):
def build(self): return MyLabel()