【问题标题】:How to update a label's text in a screen - Kivy如何在屏幕中更新标签的文本 - Kivy
【发布时间】:2019-04-22 22:09:19
【问题描述】:

我一直在尝试制作一个程序来不断更新和显示从传感器获得的读数。但是,传感器值更新后,标签仍会在后台显示旧值。如何在显示新值之前清除屏幕?

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

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    ScreenThermo - 标签被覆盖

    ScreenThermo 正在显示 2 个标签,但它们被覆盖或叠加,即一个在后台,另一个在前台。

    解决方案

    添加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'
    

    【讨论】:

    • 我尝试添加`text_size: self.size`,但问题仍然存在。它仍在后台显示以前的值并覆盖它们。
    • 能否请您张贴打印屏幕。
    • 这两个 Labels 正在被覆盖/叠加,因为它缺少布局。添加BoxLayout 将它们分开。详情请参阅更新后的帖子。
    • 好的,我已经增加了 dt 的值,它现在可以工作了。
    • 感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多