如何在猕猴桃中每秒显示一个随机点

时间:2019-02-09 18:22:16

标签: python-3.x kivy

我尝试以每秒为单位显示随机点。 这是我的代码。我知道如何显示点,在这种情况下为椭圆。但是我不知道如何使它的位置每秒更新一次。

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()

您将如何做?

1 个答案:

答案 0 :(得分:1)

在画布块中放置Clock.schedule_interval调用将无法满足在画布块中发生这些调用的要求。当代码很久以前退出with块时,它们将在以后执行。您可以做的是使用相同的构造,但是在__init__指令周围的updateEllipse内。

此外,您绝对不会将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()