Я разрабатываю многостраничное приложение Kivy, для которого я хочу иметь виджет часов на нескольких страницах. Мне удалось реализовать его на каждой странице в качестве отдельного экземпляра, но я хотел изменить его на многократно используемый виджет, но он не обновляется в течение интервалов
Это реализация файла .kv
ScreenManager:
id: screen_manager
HomeScreen:
id: home_screen
name: 'home_screen'
manager: 'screen_manager'
<ClockWidget>:
Label:
text_size: self.size
halign: 'left'
valign: 'middle'
id: clocktime
text: root.ClockTimeDisplay
<HomeScreen>:
orientation: 'vertical'
ScrollView:
do_scroll_x: True
scroll_distance: 20
BoxLayout:
orientation: 'vertical'
ClockWidget:
вот файл .py. В рамках функции update_clock я попробовал все 3 из этих реализаций одновременно. Он печатает время должным образом, но не обновляет метку, продолжает говорить «фиктивный текст».
class ClockWidget(Label):
ClockTimeDisplay = StringProperty()
ClockTimeDisplay = "dummy text"
text = ClockTimeDisplay
def __init__(self, **kwargs):
super(ClockWidget, self).__init__(**kwargs)
def update_clock(self, *args):
print(self.text)
#I've tried all 3 of these implimentations at one time or another.
self.ClockTimeDisplay = str(datetime.now().strftime('%H:%M:%S'))
self.text = str(datetime.now().strftime('%H:%M:%S'))
self.ids.clocktime.text = str(datetime.now().strftime('%H:%M:%S'))
return ClockTimeDisplay
class HomeScreen(Screen):
pass
class regatta_racer(App):
def build(self):
clock_widget = ClockWidget()
Clock.schedule_interval(clock_widget.update_clock, .1)
return Builder.load_file('regatta_racer.kv')
if __name__ == "__main__":
regatta_racer().run()
Я также пытался вызвать интервал внутри функции on_load внутри ClockWidget, но это не сработало либо.
Любая помощь будет принята с благодарностью.