Как обновить текст метки на экране - Kivy - PullRequest
0 голосов
/ 22 апреля 2019

Я пытался создать программу, которая постоянно обновляет и отображает показания, полученные с датчика. Однако после обновления значения датчика метка по-прежнему отображает старые значения в фоновом режиме. Как очистить экран перед отображением новых значений?

Я попробовал 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 file

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'

1 Ответ

0 голосов
/ 22 апреля 2019

ScreenThermo - перезаписанные метки

ScreenThermo отображает 2 метки, но они перезаписаны или наложены, т. Е. Одна находится на заднем плане, а другая на переднем плане.

Soltion

Добавьте 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

Solution

  • Remove text_size: root.width, None иsize: self.texture_size.
  • Добавить text_size: self.size.

Пример

Следующий код привязывает этот размер к размеру метки, поэтому текст будет выровнен в пределах границ виджета.Это также автоматически обернет текст метки, чтобы остаться в этой области.

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