在 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语言VKeyboard

在 Kivy 中,我如何从另一个以 kv 语言显示的另一个屏幕获取变量

在 Pycharm 中安装 Kivy Garden Flowers

带有 kivy 语言和自定义小部件的 Kivy 滚动视图

kivy 对 .py 和 .kv 文件的需求是啥

Kivy:使用 on_press 事件在屏幕管理器中更改屏幕