我现在正在制作一个 Kivy 应用程序,在其中一部分中,我正在获取 float 数组形式的数据,并且我想使用该数据在 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 画一条线。 但相反,应用程序打开并且不执行任何操作,我们将不胜感激!
最佳答案
我稍微修改了你的示例。
尝试在 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()
关于python - 尝试用 Kivy 和线程划清界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47726887/