画布强制更新不起作用

时间:2017-05-18 14:28:18

标签: python canvas kivy

我正在为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我正在寻找对于。有任何想法吗?

0 个答案:

没有答案