Когда вы устанавливаете text
кода Label
в python, оно использует значение в это время и не изменится автоматически. Если вы сделаете то же самое в kv
, оно обновится автоматически (при условии, что text
ссылается на Property
). Так что просто изменение self.number
не влияет на timer_countdown
Label
.
Итак, вам нужно явно обновить text
. Вот модифицированная версия вашего кода, которая делает это:
class TimerView(ModalView):
number = NumericProperty(15)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.background = "transparent_image.png"
self.background_color = [1/3,1/3,1/3,0.8]
self.auto_dismiss = False
self.size_hint = (None,None)
self.size = (150,50)
self.timer_countdown = MDLabel(font_style = 'H1', theme_text_color = 'Primary',
text = str(self.number), halign = 'center',
text_color = (1,1,1,1), size_hint_y = None)
self.add_widget(self.timer_countdown)
def decrement_time(self, dt):
self.number -= 1
# self.timer_countdown.text = str(self.number)
def on_number(self, instance, value):
self.timer_countdown.text = str(value)
def start(self,*args):
self.t = Clock.schedule_interval(self.decrement_time, 1)
def stop(self):
Clock.unschedule(self.t)
Ссылка на MDLabel
хранится в self.timer_countdown
, и метод on_number()
выполняется при каждом изменении number
, и просто обновляет MDLabel
. Обратите внимание, что вы также можете выполнить обновление, просто раскомментировав строку:
# self.timer_countdown.text = str(self.number)
В этом случае number
не обязательно должен быть Property
, а метод on_number()
не нужен.