我使用绑定到modalview的on_open属性的回调函数启动modalview实例:
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(表观)延迟,例如通过某种方式将回调绑定到modalview动画的on_complete属性?或者,通过使回调函数成为非阻塞函数(我该怎么做?)