kivy modalview lags on_open выполняет обратный вызов до завершения анимации - PullRequest
0 голосов
/ 23 января 2019

Я запускаю экземпляр modalview с функцией обратного вызова, которая связана со свойством modalview on_open:

myoverlay=ModalView(on_open=mycallback)

Это работает, как и ожидалось, при условии, что mycallback не займет заметного количества времени для выполнения. Под этим я подразумеваю, что вижу окно модального просмотра, всплывающее сразу после myoverlay.open (). Однако, когда mycallback содержит вызов, который не является мгновенным, например,

def mycallback():
    os.system("mount " + device + " /mount/point/path -o uid=me,gid=me")

тогда появление модального окна заметно отстает от myoverlay.open (). Похоже, что on_open срабатывает до того, как modalview оживил себя. Кажется, что обратный вызов блокирует анимацию modalview. Приложение выглядит запаздывающим / не отвечающим из-за этого.

Мое «грязное» решение состоит в том, чтобы сделать самозадержку обратного вызова следующим образом:

def mycallback(dt=0):
    if dt: # delayed call scheduled by itself
        os.system("mount " + device + " /mount/point/path -o uid=me,gid=me")
    else: # initial call
        Clock.schedule_once(mycallback, 0.5) # half a second delay to allow for animation to complete

У меня вопрос: есть ли более чистый способ остановить задержку modalview (очевидное), например, каким-то образом связать обратный вызов со свойством on_complete анимации modalview? Или, альтернативно, сделав функцию обратного вызова неблокируемой (как бы я это сделал?)

...