2 回答
TA贡献1807条经验 获得超9个赞
您必须使用Clock.schedule_interval()来更新绘画,但您必须重用它们而不是创建新的 Lines 以节省资源:
from kivy.app import App
from kivy.graphics import Color, Line
from kivy.uix.floatlayout import FloatLayout
from kivy.clock import Clock
from datetime import datetime
class drawClock(FloatLayout):
def __init__(self, **kwargs):
super(drawClock, self).__init__(**kwargs)
self.bind(pos=self.updateClock)
self.bind(size=self.updateClock)
Clock.schedule_interval(self.updateClock, 1)
self.create_canvas()
def create_canvas(self):
with self.canvas:
self.hour_line = Line(width = 2, color = Color(1,0,0))
self.minute_line = Line(width = 2, color = Color(0,1,0))
self.second_line = Line(width = 2, color = Color(0,0,1))
def updateClock(self, *kwargs):
now = datetime.now()
hour = now.hour
minute = now.minute
second = now.second
hourAngle = (hour%12) * 30
minuteAngle = minute * 6
secondAngle = second * 6
self.hour_line.circle = self.center_x, self.center_y, 80, 0, hourAngle
self.minute_line.circle = self.center_x, self.center_y, 65, 0, minuteAngle
self.second_line.circle = self.center_x, self.center_y, 50, 0, secondAngle
class mainApp(App):
def build(self):
return drawClock()
if __name__ == '__main__':
mainApp().run()
TA贡献1824条经验 获得超6个赞
使用update()
方法。这是一种粗略的方法,但它会给你你想要的。update 方法基本上更新窗口。
一种更有效的方法是使用该after()
方法。
after 基本上告诉了之后要做什么,所以弄清楚。
window.after(delay_ms, callback=None, *args)
这些是 的参数after()
。
例如,这将是等待一秒钟然后执行 func up
window.after(1000, up)
添加回答
举报