Python 2.7 如何在kivy中创建实时图形?

Python 2.7 如何在kivy中创建实时图形?,python-2.7,graph,kivy,Python 2.7,Graph,Kivy,我想用kivy创建一个实时图形。我怎样才能做到这一点?我是新来的基维。请帮帮我 中有一个图形小部件。你可以在kivy's中阅读有关使用花园小部件的内容。我还尝试在kivy中制作一个实时图形 尤斯考普 我从Youscope开始。youscope的演示可以在下面的youtube视频中看到 源代码如下: 它是用Pygame编写的,使用wave音频文件作为输入源,但也可以使用其他源(例如串行数据或计算曲线) Youscope的问题是我无法用它为Android构建APK。我曾尝试为android安装pyt

我想用kivy创建一个实时图形。我怎样才能做到这一点?我是新来的基维。请帮帮我

中有一个图形小部件。你可以在kivy's中阅读有关使用花园小部件的内容。

我还尝试在kivy中制作一个实时图形

尤斯考普 我从Youscope开始。youscope的演示可以在下面的youtube视频中看到

源代码如下:

它是用Pygame编写的,使用wave音频文件作为输入源,但也可以使用其他源(例如串行数据或计算曲线)

Youscope的问题是我无法用它为Android构建APK。我曾尝试为android安装python子集,但在构建时总是收到错误消息。(不知道出了什么问题。)

所以我决定将Youscope代码移植到Kivy,因为有了Buildozer,我可以制作Android APK。(尚未测试过如何构建图形应用程序,但这应该可以正常工作。)

Youscope和Kivy 这幅画在kivy中的运行速度似乎与原始代码一样快,但目前我仍在重新绘制曲线。但是我认为画图应该快一点,也许计算点的时间太长了。 我想我应该检查一个WAV文件作为输入,如果它更快

时钟时间间隔(Kivy)与游戏循环(Pygame) Kivy的源代码与pygame代码非常相似,但Kivy中没有带有while循环的游戏循环。 在Kivy中,您正在使用时钟回调。计划间隔(回调,时间单位为秒)(请参阅)以更新/绘制屏幕

使用帧缓冲区进行绘图 对于绘图,需要使用添加到画布的帧缓冲区。看

曲线是从左到右逐点绘制的。 重画是指我在帧缓冲区上绘制第一条曲线(我使用计算出的正弦波),当我到达屏幕的右边缘后,我开始用新曲线从左侧再次绘制

现在仍然需要清除之前绘制的曲线。您可以在这里重新绘制整个屏幕,但这可能比逐点删除旧线条要慢

这里的困难是恢复旧曲线下面的背景色。看起来我用错了像素的颜色,但我不确定出了什么问题

获取用于刷新屏幕的像素颜色() 使用Framebuffer.get_pixel_color(wx,wy)(需要Kivy 1.8.0)可以在rgba中获取像素的颜色,但这无法正常工作。也许这是一个更新问题,但我不确定

使用黑色像素(不使用get_pixel_color)清除是可行的,但会删除背景网格。

定义绘图

e、 g

定义图

e、 g

更新图形并更新x轴:

e、 g

叫钟

e、 g

并添加小部件:

        b.add_widget(graph)

我希望我没有忘记任何事情。它提供了kivy Garden的运行图。

它支持直方图吗?我不这么认为。不过,今年我们可能会在matplotlib支持中有一个gsoc项目。
graph = Graph(
    xlabel='Iteration',
    ylabel='Value',
    x_ticks_minor=1,
    x_ticks_major=5,
    y_ticks_major=1,
    y_grid_label=True,
    x_grid_label=True,
    padding=5,
    xlog=False,
    ylog=False,
    x_grid=True,
    y_grid=True,
    ymin=0,
    ymax=11,
    **graph_theme)
    def update_xaxis(self,*args):
        global graph
        global cnt
        graph.xmin = cnt - 50
        graph.xmax = cnt

    def update_points(self, *args):
        global i
        global MYLIST
        global cnt

        #self.plot.points = [(i,i)]
        self.plot.points = [z for z in MYLIST]
        Clock.schedule_interval(self.update_points, 1/60.)
        Clock.schedule_interval(self.update_xaxis, 1/60.)
        b.add_widget(graph)