【发布时间】:2018-09-06 09:23:46
【问题描述】:
我正在尝试为 Kivy 应用程序实现测量的实时绘图,但我不了解 kivy garden 库的内部工作原理。
我想要实现的目标:我想在 ScrollView 内有多个绘图,这样我就可以从字典中以编程方式添加多个实时绘图,如果它们占用更多,则滚动浏览它们空间超过一个屏幕高度。我遇到的主要问题是 Graph 的行为不像普通的小部件,而是像画布一样。我已经尝试使用 matplotlib 作为 backend_kivyagg 来实现这一点,但是我没有为每个 subplot that I created 设置固定大小。
有很多事情我不明白为什么它们会像它们那样发生。
from math import sin, cos
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.widget import Widget
from kivy.garden.graph import Graph, MeshLinePlot
class Plot(Widget):
def __init__(self):
super(Plot, self).__init__()
self.graph = Graph(xlabel="x", ylabel="y", x_ticks_minor=5, x_ticks_major=25, y_ticks_major=1,
y_grid_label=True, x_grid_label=True, x_grid=True, y_grid=True,
xmin=-0, xmax=100, ymin=-1, ymax=1, draw_border=False)
# graph.size = (1200, 400)
# self.graph.pos = self.center
self.plot = MeshLinePlot(color=[1, 1, 1, 1])
self.plot.points = [(x, sin(x / 10.)) for x in range(0, 101)]
self.plot2 = MeshLinePlot(color=[1, 0, 0, 1])
self.plot2.points = [(x, cos(x / 10.)) for x in range(0, 101)]
self.add_widget(self.graph)
self.graph.add_plot(self.plot)
self.graph.add_plot(self.plot2)
class GraphLayoutApp(App):
def build(self):
scroll_view = ScrollView()
grid_layout = GridLayout(cols=1, row_force_default=True, padding=20, spacing=20)
graph = Plot()
graph2 = Plot()
label = Label(text="Hello World!")
label2 = Label(text="Hello World!")
grid_layout.add_widget(label)
grid_layout.add_widget(graph)
grid_layout.add_widget(label2)
grid_layout.add_widget(graph2)
scroll_view.add_widget(grid_layout)
return scroll_view
if __name__ == '__main__':
GraphLayoutApp().run()
问题:
在 GraphLayoutApp 类中,我创建了两个对象 graph 和 graph2,但是如果我将它们添加到 GridLayout() 中,只会出现一个?如何 我可以添加多个图表吗?
还在类 GraphLayoutApp 的 build 方法中,我创建了两个标签。我想先显示第一个
label然后是图表 然后是第二个标签label2。但在我看来,图表 始终显示在左下角。我想这必须做 与绘制它的画布,但我无法解决它。
【问题讨论】:
标签: python plot kivy kivy-language