我现在正在制作一个Kivy应用程序,在其中的一部分中,我将数据作为浮点数的数组获取,我想使用数据在Kivy中绘制一条线。 问题是,我希望它不断运行,所以我使用了线程,但Kivy不会划线。这是代码的精简版本,用于说明问题:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Line
from threading import Thread
class MyWidget(Widget):
def Draw(self):
with self.canvas:
Line(points=[100, 200, 300, 400])
class MainApp(App):
def build(self):
return MyWidget()
Thread(target=MyWidget().Draw).start()
MainApp().run()
我希望这段代码用点100,200,300,400绘制一条线。 但相反,该应用程序打开,什么都不做,将不胜感激!
答案 0 :(得分:0)
我稍微修改了你的例子
尝试在init方法中启动线程。因为当您执行MyWidget().Draw
时,您使用新的MyWidget
对象执行此操作,而不是在构建方法中返回的对象。所以永远不会画出那条线。但是另一个小部件中的线不在屏幕上
试试这样:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Line, InstructionGroup
from threading import Thread
from random import randint
import time
class MyWidget(Widget):
def __init__(self, **kwargs):
super(MyWidget, self).__init__(**kwargs)
self.ig = InstructionGroup()
self.line = Line(points=[100, 200, 300, 400])
self.ig.add(self.line)
self.canvas.add(self.ig)
Thread(target=self.draw).start()
def draw(self):
while True:
self.line.points = [randint(0,400) for i in range(4)]
time.sleep(0.5)
class MainApp(App):
def build(self):
return MyWidget()
MainApp().run()