我一直在尝试制作一个程序,该程序可以不断更新并显示从传感器获得的读数。但是,在更新传感器值之后,标签仍会在后台显示旧值。在显示新值之前如何清除屏幕?
我已经尝试过self.clear_screen
,但这没有帮助。我想念什么?
.py文件:
class MainScreen(Screen):
pass
class ScreenThermo(Screen):
def __init__(self,**kwargs):
super(ScreenThermo, self).__init__(**kwargs)
Clock.schedule_interval(self.getTemp, 2)
def getTemp(self,dt):
temperature = sensor.get_temperature()
thetemp = temperature
self.manager.screen_thermo.ids.TempLabel.text = str(thetemp)
def on_enter(self, *args):
self.__init__()
pass
class ScreenManagement(ScreenManager):
pass
.kv文件
ScreenManagement:
id: screen_manager
screen_thermo: screen_thermo
MainScreen:
ScreenThermo:
id: screen_thermo
name: 'thermo'
manager: screen_manager
<MainScreen>:
name: "main"
Label:
text: "Welcome to \n Interactive HealthCare \n System"
font_size: 60
halign: 'center'
valign: 'middle'
pos_hint: {'x': .01, 'y': .05}
on_touch_down: app.root.current = "thermo"
<ScreenThermo>:
Label:
text: "temperature"
font_size: 60
text_size: root.width, None
size: self.texture_size
halign: 'left'
valign: 'middle'
Label:
id: TempLabel
text: "temperature updated"
font_size: 60
text_size: root.width, None
size: self.texture_size
halign: 'center'
valign: 'middle'
答案 0 :(得分:0)
ScreenThermo
显示2个标签,但它们被覆盖或叠加,即一个在背景中,另一个在前景中。
添加BoxLayout
来分隔两个Labels
。
<ScreenThermo>:
BoxLayout:
Label:
text: "temperature"
font_size: 60
text_size: self.size
halign: 'left'
valign: 'middle'
Label:
id: TempLabel
text: "temperature updated"
font_size: 60
text_size: self.size
halign: 'center'
valign: 'middle'
之所以会显示旧值,是因为以下代码创建了一个可以垂直增长但将文本以一定宽度环绕的标签。
Label:
text_size: root.width, None
size: self.texture_size
text_size: root.width, None
和size: self.texture_size
。 text_size: self.size
。以下代码将此大小绑定到Label的大小,因此文本将在小部件范围内对齐。这还将自动包装Label的文本以保留在该区域内。
Label:
text_size: self.size
halign: 'right'
valign: 'middle'