我想使用.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文件完成此操作?
答案 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)