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

Python 如何在Kivy kv文件中创建Matplotlib小部件?,python,matplotlib,kivy,kivy-language,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])

我想用一个.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文件完成此操作

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

BoxLayout:
    id: destination
然后在python代码中使用以下内容:

self.ids.destination.add_widget(FigureCanvasKivyAgg(plt.gcf()))
因此,您实际上是在使用kivy语言文件中设置的id作为matplotlib图的参考。

您(和我)需要扩展FigureCanvasKivyAgg,如John Anderson的答案所示:

上述问题的kv文件:

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

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

我不知道如何使用你的代码。从上面的示例中,您可以在MyApp
\uuu init(self)\uuuu方法中添加
self.ids.destination.add_小部件(FigureCanvasKivyAgg(plt.gcf())
?您可以将它放在任何地方,放在正在调用的函数或方法中。如果希望在窗口生成后立即绘制图形,则应将其放入应用程序类的构建方法中。我实际上是在一个自定义方法中使用它,每当我在窗口中放置一个文件时就会调用它。所以我把一个文件放在窗口上,它会把数据绘制成一个图表。你是个救生员。在经历了这么多无止境的道路之后,我终于意识到可以直接制作参考id。我使用了self.root.ids.destination.add_小部件(FigureCanvasKivyAgg(plt.gcf()))instead@astroflyer我本来很难让它工作,所以我很高兴我的回答有帮助!!
FloatLayout:
    MyFigure:
        pos: (400, 20)
        size: (300, 200)
        size_hint: (None, None)