Я запускаю экземпляр 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? Или, альтернативно, сделав функцию обратного вызова неблокируемой (как бы я это сделал?)