Отображение графика matplotlib в контейнере - PullRequest
1 голос
/ 22 марта 2020

Я работаю над новым ie приложением с Kivy и python для расчета потребления алкоголя. Приложение рассчитывает потребление алкоголя и отображает его на графике matplotlib. Я могу заставить график отображаться на отдельном экране, но я бы хотел, чтобы график отображался над калькулятором при нажатии клавиши вычисления.

Я пытался просмотреть документацию Kivy, но не могу понять! Я думаю, что это может быть связано с box.add_widget (FigureCanvasKivyAgg (plt.gcf ())), так как это отображает график на виджете, но я не знаю, как добавить его на экран калькулятора. Я попытался использовать ID: скользящий график в моем файле KIVY (ниже), но это не сработало. Любая помощь могла бы быть полезна. Спасибо!

main.py ...

class GraphGridLayout(GridLayout):
    def build(self):
        return GraphGridLayout()

class AlcGridLayout(GridLayout):

    def calculate(self, calculation):
        if calculation:
            try:
                self.display.text = str(eval(calculation))

                MyApp().run()

            except Exception:
                self.display.text = "Something went wrong!"

    def another(self, calculation):
        if calculation:
            try:
                self.display.text = str(eval(calculation))

            except Exception:
                self.display.text = "Something went wrong!"

graph.py ....

class MyApp(App):

    x = [1, 2, 3, 4, 5, 6, 7]
    y = [None, 3, 2, 4, 0, 0, 0]

    if y[0] is None:
        y[0] = 0
    else:
        y[0] = 2

    plt.plot(x, y)
    plt.ylabel('Alcohol Units')
    plt.xlabel('Day')
    plt.tight_layout(10)


    def build(self):
        box = BoxLayout()

        box.name: box
        box.add_widget(FigureCanvasKivyAgg(plt.gcf()))

        return box

Alcohol.kv ... [есть много так что это первый бит. Было бы здорово, чтобы график отображался с идентификатором: rollgraph / imageview ...?]

<CustButton@Button>:
    font_size: 18
    size: 30, 30
    background_color:.50,.50,.50,1

<CustLabel@Label>:
    font_size: 18
    id: label
    color:.25,.80,.92,1
    size: 30, 30
    background_color: .50,.50, .50, 1


<AlcGridLayout>:
    id: rollinggraph
    rows: 16
    padding: 0
    spacing: 0


    # Graph display
    BoxLayout:
        id: imageView
        background_color: .50,.10, .50, 1
...