2 回答

TA貢獻1807條經驗 獲得超9個贊
您必須使用Clock.schedule_interval()來更新繪畫,但您必須重用它們而不是創(chuàng)建新的 Lines 以節(jié)省資源:
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)
這些是 的參數(shù)after()
。
例如,這將是等待一秒鐘然后執(zhí)行 func up
window.after(1000, up)
添加回答
舉報