python-3.x - 如何在kivy中每秒显示一个随机点
问题描述
我尝试在 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()
你会怎么做?
解决方案
将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()
推荐阅读
- go - 如何在golang中使用表情符号处理(解码或删除无效的Unicode代码点)字符串?
- python - 用于部署的 Python 脚本:比较两个文件夹以生成用于备份和 ftp 的增量文件
- mediawiki - MediaWiki 和 GraphViz - 没有图表
- c# - .NET 中是否有对话框/菜单编辑器控件?
- php - WordPress页面内容随机插入短代码内
- windows-10 - 启用了 OneDrive Files On-Demand 的兼容防病毒软件
- php - 当用户未填写必填字段时,Laravel 向会话输入数据
- android - Flutter Blue 设置通知
- sql - 在特定位置添加空格的更新 | SQL 服务器
- amazon-web-services - 同一子网内的 AWS VPC EC2 连接