【问题标题】:using Kivy Garden Graph in KV language在 KV 语言中使用 Kivy Garden Graph
【发布时间】: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 等的指标转换。

标签: python graph kivy


【解决方案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 的回答非常有帮助,但对我来说不太有效。我对此很陌生,所以也许这些事情太明显了,不需要说明。但如果它对我这个级别的其他人有所帮助,我必须:

    1. 在 kv 文件中缩进 Graph: 声明下的属性(以绕过 kv 解析器中的“声明后数据无效”异常。

    2. 添加这些包括:

      语言:lang-py

      from kivy.properties import ObjectProperty  
      from kivy.app import App    
      from kivy.uix.widget import Widget  
      

    到 python 文件的顶部。

    1. 将 kv 文件命名为与应用程序类定义相匹配,因此:graphLayout.kv(我曾将其命名为 graph.kv,所以它被忽略了——新手错误!)

    2. 我得到了 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 所示,也

        【讨论】:

          猜你喜欢
          • 2017-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多