如何在Kivy kv文件中创建Matplotlib小部件?

时间:2018-04-25 01:24:23

标签: python matplotlib kivy kivy-language

我想使用.kv文件制作一个Matplotlib小部件,但我不知道该怎么做。

如果没有.kv文件,基本代码如下所示:

from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
import matplotlib.pyplot as plt

plt.plot([1, 23, 2, 4])
plt.ylabel('some numbers')

class MyApp(App):

    def build(self):
        box = BoxLayout()
        box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
        return box

MyApp().run()

如何使用.kv文件完成此操作?

2 个答案:

答案 0 :(得分:0)

这就是我所想的。在.KV语言文件中,指定布局并为其指定ID:

BoxLayout:
    id: destination

然后在您的python代码中使用以下代码:

self.ids.destination.add_widget(FigureCanvasKivyAgg(plt.gcf()))

实际上,您可以有效地使用在kivy语言文件中设置的ID作为matplotlib图的参考。

答案 1 :(得分:0)

您(和我)需要像John Anderson对Python to KV Lang - FigureCanvasKivyAgg的回答一样扩展FigureCanvasKivyAgg:

#!/usr/bin/env python3
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivy.app import App
import matplotlib.pyplot as plt

plt.plot([1, 23, 2, 4])
plt.ylabel('some numbers')

class MyFigure(FigureCanvasKivyAgg):
    def __init__(self, **kwargs):
        super().__init__(plt.gcf(), **kwargs)

class MyApp(App):
    pass

MyApp().run()

上述问题的kv文件:

BoxLayout:
    MyFigure:

此修复程序还使我能够设置图形的位置:

FloatLayout:
    MyFigure:
        pos: (400, 20)
        size: (300, 200)
        size_hint: (None, None)