Подтвердить что ты не робот

С использованием Kivy Garden Graph на языке KV

Как использовать kivy-модуль garden.graph внутри файла kv? Я только нашел документацию, объясняющую, как использовать ее в главном python script.

Я импортировал kivy.garden.graph в файл python, и я могу добавить Graph внутри файла kv, но я не нашел документацию, как установить размер, графики и т.д.

Graph:
    id: graph_test
    plot: MeshLinePlot

это дает ошибку с MeshLinePlot is not defined, хотя я импортировал ее на стороне python.

любая помощь была бы высоко оценена, возможно, мы могли бы затем добавить эту информацию в график github readme.

4b9b3361

Ответ 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

Была та же проблема. Здесь решение:

Как правило, согласно документации kivy, в файле kv:

#:import name x.y.z

эквивалентно:

from x.y import z as name

Итак, вы должны использовать следующее:

#:import MeshLinePlot kivy.garden.graph.MeshLinePlot

Работал в моем случае с классом Graph, но, честно говоря, мне еще не удалось добавить этот график на график.

Ответ 3

Я думаю, что все было на правильном пути. Использование #: import должно иметь возможность импортировать файл.

напишите это в файле kv:

#:import MeshLinePlot

он должен иметь возможность импортировать модуль, как показывает kv documentation, также

Ответ 4

Ответ от Маттиса Аспа был очень полезен, но для меня он не совсем сработал. Я новичок в этом, так что, возможно, эти вещи слишком очевидны, чтобы их указывать. Но в случае, если это поможет кому-то другому на моем уровне, я должен был:

  1. Сделайте отступ в свойствах под объявлением Graph: в файле kv (чтобы обойти исключение "неверные данные после объявления" из анализатора 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. Поэтому я закомментировал это и использовал вместо этого идентификатор, изменив строку

    self.graph_test.add_plot(plot)  
    

    чтобы:

    self.ids["graph_test"].add_plot(plot)
    

Могу поспорить, что по крайней мере некоторые из этих изменений связаны с различиями версий в kivy, поэтому для ясности я использую kivy 1.9.1 и python 2.7.13.