Вызов подпрограммы Python в тот самый момент, когда значение секунд изменяется? - PullRequest
0 голосов
/ 25 апреля 2019

В моем приложении я показываю часы.Строка, представляющая время, обновляется один раз в секунду при изменении числа секунд.Я делаю это путем опроса системных часов, чтобы сгенерировать свойство секунд.Изменение значения этого свойства вызывает обновление экрана (выполняется с помощью привязок свойств Kivy).Вот пример кода, который работает.

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.clock import Clock
import datetime


Builder.load_string('''
#: kivy 1.9.2

<MainWidget>:
    Label:
        text: root.text
        font_size: 50

''')


class MainWidget(BoxLayout):

    text=StringProperty() # this can be bound to 'text' property of a child widget for observation
    seconds=StringProperty()

    def __init__(self, **kwargs):
        super(MainWidget, self).__init__(**kwargs)
        self.bind(seconds=self.update_text)
        Clock.schedule_interval(self.poll_datetime, .1)

    def poll_datetime(self, dt):
        self.seconds=datetime.datetime.now().strftime("%S")

    def update_text(self, *args):
        self.text=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        #print "updating text"


class MyApp(App):
    def build(self):
        mw=MainWidget()
        return mw


if __name__ == '__main__':
    MyApp().run()

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

...