我如何在Kivy中显示图表

时间:2019-12-27 21:47:22

标签: python-3.x kivy plotly

我希望将图形添加到我的奇异屏幕应用程序之一。带有StartScreen的Basic App和带有图形本身以及少量按钮的SecondScreen。我无法在Kivy中显示图表。我尝试为它创建一个类,但最终总是收到此错误:

AttributeError:'Figure'对象没有属性'set_canvas'

我尝试自己寻找答案,但我总是死胡同。这是下图的代码以及我的应用程序的代码。如果有人可以向我指出正确的方向,那么您将成为我的英雄!

您是真的,编码新手!

以下是图形:

import plotly.graph_objects as go

fig = go.Figure(go.Indicator(
    mode = "number+gauge+delta",
    gauge = {'shape': "bullet"},
    delta = {'reference': 300},
    value = 220,
    domain = {'x': [0.1, 1], 'y': [0.2, 0.9]},
    title = {'text': "Avg order size"}))

fig.show()

这是我的main.py:

import plotly.graph_objects as go
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import ButtonBehavior
from kivy.uix.widget import Widget
from kivy.uix.image import Image
from kivy.uix.screenmanager import Screen
from kivy.graphics import Rectangle
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivy.properties import ObjectProperty
import matplotlib.pyplot as plt


class StartScreen(Screen):
    pass


Window.clearcolor = (1, 1, 1, 1)


class GraphScreen(Screen):
    pass


class ImageButton(ButtonBehavior, Image):
    pass


GUI = Builder.load_file("main.kv")


class Main(App):
    def build(self):
        return GUI

    def change_screen(self, screen_name):
        # Get the screen manager from the kv file
        screen_manager = self.root.ids['screen_manager']
        screen_manager.current = screen_name


if __name__ == '__main__':
    Main().run()

这是我的main.kv:

#:include kv/startscreen.kv
#:include kv/graphscreen.kv

GridLayout:
    cols: 1
    ScreenManager:
        id: screen_manager
        StartScreen:
            name: "start_screen"
            id: start_screen
        GraphScreen:
            name: "graph_screen"
            id: graph_screen

这是我的开始屏幕。kv:

#:import utils kivy.utils
<StartScreen>:
    FloatLayout:
        GridLayout:
            rows: 1
            pos_hint: {"top": 1, "left": 1}
            size_hint: 1, .5
            Label:
                rows: 1
                text: "Budget Meter"
                font_size: 30
                font_name: "font/Duldolar.ttf"
                color: 0, 0, 0, 1

        GridLayout:
            rows: 1
            pos_hint: {'x':.02, 'y':.6}
            size_hint: 1, .1
            ImageButton:
                source: "images/Ecommerce_203.jpg"
                on_release:
                    app.change_screen("graph_screen")

这是我的graphscreen.kv:

#:import utils kivy.utils

<GraphScreen>:


    BoxLayout:
        orientation: "vertical"
        size_hint: .3, .5
        pos_hint: {'x':.35, 'y':0}
        ImageButton:
            source: "images/ope.jpg"
            on_release:
                app.change_screen("start_screen")

0 个答案:

没有答案