我正在为Kivy中的小部件提供滑动功能。我不改变它的位置或动画它,而是滑动激发小部件的画布以根据滑动的长度和方向改变颜色和alpha。创造这个并不是一个问题 我的问题在于 on_touch_up 事件。我希望这个事件能够使alpha达到100%并在清除画布之前将其保持半秒。运行一些测试后,画布更新似乎受到 on_touch_up 事件的实际生命周期的限制;那就是:在事件结束之前,该死的东西不会更新。我尝试了三种不同的方法,但都无济于事。
if / else序列在三个代码示例中保持不变,因此我将其从子弹2和3中排除:
通过 self.canvas.ask_update()强制更新
def on_touch_up(self, touch):
if abs(self.x_total) > abs(self.y_total):
if self.x_total < 0:
self.canvas.add(Color(1, 0, 0, 1))
else:
self.canvas.add(Color(0, 1, 0, 1))
else:
if self.y_total < 0:
self.canvas.add(Color(0, 0, 1, 1))
else:
self.canvas.add(Color(1, 1, 0, 1))
self.canvas.add(Rectangle(pos=self.pos, size=self.size))
self.canvas.ask_update()
sleep(0.50)
self.canvas.clear()
使用画布回调在 on_touch_up 事件之外执行更新
def on_touch_up(self, touch):
...
with self.canvas:
Callback(self.update_final)
sleep(0.50)
self.canvas.clear()
def update_final(self, instr):
self.canvas.add(Rectangle(pos=self.pos, size=self.size))
创建类级Rectangle对象并更改其值。
def on_touch_up(self, touch):
...
self.rect.pos = self.pos
self.rect.size = self.size
sleep(0.50)
self.canvas.clear()
注意:如果我删除了最终的self.canvas.clear(),我发现触摸后我看到的是半秒暂停,然后我得到100%alpha我正在寻找对于。有任何想法吗?