首页 > 解决方案 > 如何每秒更新 Canvas?

问题描述

我正在尝试创建一个具有 3 个弧线的时钟,一个小时、分钟和秒。该应用程序当前绘制了每条弧线,如预期的那样具有不同的颜色和半径。弧线也根据应用程序启动的时间填充。红色弧线代表小时,绿色弧线代表分钟,蓝色弧线代表秒。从这里开始,我试图更新画布,以便弧线根据时间变化(每秒一次)。我还想要一个在时钟中心显示时间的标签。谁能帮我解决这个问题?我对 Kivy 比较陌生,所以我不确定我应该做什么。

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Color, Line
from kivy.uix.floatlayout import FloatLayout
from kivy.clock import Clock
from datetime import datetime

# update canvas every second
# display time in center of clock
class drawClock(FloatLayout):

    def __init__(self, **kwargs):
        super(drawClock, self).__init__(**kwargs)
        self.bind(pos=self.updateClock)
        self.bind(size=self.updateClock)

    def updateClock(self, *kwargs):
        with self.canvas:
            now = datetime.now()
            hour = now.hour
            minute = now.minute
            second = now.second
            hourAngle = (hour%12) * 30
            minuteAngle = minute * 6
            secondAngle = second * 6
            Line(circle = (self.center_x, self.center_y, 80, 0, hourAngle), width = 2, color = Color(1,0,0))
            Line(circle = (self.center_x, self.center_y, 65, 0, minuteAngle), width = 2, color = Color(0,1,0))
            Line(circle = (self.center_x, self.center_y, 50, 0, secondAngle), width = 2, color = Color(0,0,1))

class mainApp(App):
    def build(self):
        return drawClock()

if __name__ == '__main__':
    mainApp().run()

标签: pythonpython-3.xkivy

解决方案


使用update()方法。这是一种粗略的方式,但它会给你你想要的。update 方法基本上是更新窗口。

一种更有效的方法是使用该after()方法。

after 基本上告诉了之后要做什么,所以弄清楚。

window.after(delay_ms, callback=None, *args)

这些是after().

例如,这将是等待一秒钟然后执行 funcup

window.after(1000, up)


推荐阅读