我尝试以每秒为单位显示随机点。 这是我的代码。我知道如何显示点,在这种情况下为椭圆。但是我不知道如何使它的位置每秒更新一次。
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.widget import Widget
from kivy.graphics import Ellipse
import time
import numpy as np
class RandomPoint(Widget):
def __init__(self,dimension):
super(RandomPoint,self).__init__()
self.d = dimension
self.point = Ellipse(pos=list(np.random.randint(0,1000,2)),size = (self.d, self.d))
def update(self, *args):
self.point = Ellipse(pos=list(np.random.randint(0,1000,2)),size = (self.d, self.d))
class TimeApp(App):
def build(self):
wid = Widget()
with wid.canvas:
p = RandomPoint(25)
Clock.schedule_interval(p.update, 1)
return wid
TimeApp().run()
您将如何做?
答案 0 :(得分:1)
在画布块中放置Clock.schedule_interval
调用将无法满足在画布块中发生这些调用的要求。当代码很久以前退出with
块时,它们将在以后执行。您可以做的是使用相同的构造,但是在__init__
指令周围的update
和Ellipse
内。
此外,您绝对不会将RandomPoint
小部件添加到您的根小部件中,因此无论其说明如何发生,它都将完全不可见。
class RandomPoint(Widget):
def __init__(self,dimension):
super(RandomPoint,self).__init__()
self.d = dimension
self.points = []
with self.canvas:
self.point.append(Ellipse(pos=list(np.random.randint(0,1000,2)),size = (self.d, self.d)))
def update(self, *args):
with self.canvas:
self.points.append(Ellipse(pos=list(np.random.randint(0,1000,2)),size = (self.d, self.d)))
class TimeApp(App):
def build(self):
wid = Widget()
p = RandomPoint(25)
wid.add_widget(p)
Clock.schedule_interval(p.update, 1)
return wid
TimeApp().run()