如何在屏幕Kivy中更新标签文本

2024-09-28 23:54:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试做一个程序,不断更新和显示从传感器获得的读数。但是,更新传感器值后,标签仍在背景中显示旧值。如何在显示新值之前清除屏幕?你知道吗

我试过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'

Tags: textselfidsizethermoinitdefmanager
1条回答
网友
1楼 · 发布于 2024-09-28 23:54:01

ScreenThermo-标签被覆盖

ScreenThermo正在显示两个标签,但它们被覆盖或超级施加,即一个在后台,另一个在前台。你知道吗

溶液

添加一个BoxLayout来分隔这两个Labels。你知道吗

片段-kv

<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, Nonesize: self.texture_size。你知道吗
  • 添加text_size: self.size。你知道吗

示例

下面的代码将此大小绑定到标签的大小,因此文本将在小部件边界内对齐。这也将自动包装标签的文本以保持在此区域内。你知道吗

Label:
    text_size: self.size
    halign: 'right'
    valign: 'middle'

相关问题 更多 >