在 KV 语言中使用 Kivy Garden Graph
Posted
技术标签:
【中文标题】在 KV 语言中使用 Kivy Garden Graph【英文标题】:using Kivy Garden Graph in KV language 【发布时间】:2015-08-29 12:42:36 【问题描述】:如何在 kv 文件中使用 kivy 模块garden.graph
?我只找到了解释如何在主要 python 脚本中使用它的文档。
我在python文件中导入了kivy.garden.graph
,我可以在kv文件中添加Graph
,但是我没有找到任何关于如何设置大小、绘图等的文档。
Graph:
id: graph_test
plot: MeshLinePlot
这给出了一个错误,因为MeshLinePlot is not defined
,尽管我在 python 端导入了它。
任何帮助将不胜感激,也许我们也可以将此信息添加到图形的 github 自述文件中。
【问题讨论】:
kv 语言有 #:import 语句,你可以在文档中找到它。你必须像往常一样导入你在 python 部分中使用的任何东西,除了一些特殊功能,如 dp、sp 等的指标转换。 【参考方案1】:基于 piwnk 的答案:
我将此添加到 .kv 文件中:
#:import MeshLinePlot kivy.garden.graph.MeshLinePlot
<SetGraph>:
graph_test : graph_test
Graph:
id: graph_test
plot: MeshLinePlot
xlabel:'X'
ylabel:'Y'
x_ticks_minor:5
x_tics_major:25
y_ticks_major:1
y_grid_label:True
x_grid_label:True
padding:5
x_grid:True
y_grid:True
xmin:-0
xmax:100
ymin:-1
ymax:1
pos: 0, root.height / 6
size: root.width * 2 / 3 , root.height * 18 / 24
在 main.py 中,我添加了:
from math import sin
from kivy.garden.graph import Graph, MeshLinePlot
class SetGraph(Widget):
graph_test = ObjectProperty(None)
update_graph(self):
plot = MeshLinePlot(color=[1, 0, 0, 1])
plot.points = [(x, sin(x / 10.)) for x in range(0, 101)]
self.graph_test.add_plot(plot)
class graphLayoutApp(App):
def build(self):
disp = SetGraph()
disp.update_graph()
return disp
if __name__ == '__main__':
graphLayoutApp().run()
我已将原始测试解决方案更改为更具描述性的名称。希望我没有犯任何错误。如果解决方案不完整,请告诉我。
【讨论】:
【参考方案2】:Mattis Asp 的回答非常有帮助,但对我来说不太有效。我对此很陌生,所以也许这些事情太明显了,不需要说明。但如果它对我这个级别的其他人有所帮助,我必须:
在 kv 文件中缩进 Graph: 声明下的属性(以绕过 kv 解析器中的“声明后数据无效”异常。
添加这些包括:
语言:lang-py
from kivy.properties import ObjectProperty
from kivy.app import App
from kivy.uix.widget import Widget
到 python 文件的顶部。
将 kv 文件命名为与应用程序类定义相匹配,因此:graphLayout.kv(我曾将其命名为 graph.kv,所以它被忽略了——新手错误!)
我得到了 graph_test 的“无效属性名称”:graph_test。所以我将其注释掉并改用 id 来更改行
self.graph_test.add_plot(plot)
到:
self.ids["graph_test"].add_plot(plot)
我敢打赌,这些变化中至少有一些与 kivy 的版本差异有关,所以为了清楚起见,我使用的是 kivy 1.9.1 和 python 2.7.13。
【讨论】:
【参考方案3】:遇到了同样的问题。这是解决方案:
通常,根据 kivy 文档,在 kv 文件中:
#:import name x.y.z
相当于:
from x.y import z as name
所以你应该使用以下内容:
#:import MeshLinePlot kivy.garden.graph.MeshLinePlot
在我的情况下使用 Graph 类,但老实说,我还没有设法将此图添加到图表中。
【讨论】:
【参考方案4】:我认为 inclement 是在正确的轨道上。使用 #:import 应该可以导入文件。
在 kv 文件中写入:
#:import MeshLinePlot
它应该能够导入模块,如kv documentation 所示,也
【讨论】:
以上是关于在 KV 语言中使用 Kivy Garden Graph的主要内容,如果未能解决你的问题,请参考以下文章
在 Kivy 中,我如何从另一个以 kv 语言显示的另一个屏幕获取变量