【问题标题】:Opening matplotlib inside MDCard in kivy在 kivy 的 MDCard 中打开 matplotlib
【发布时间】:2022-10-05 15:51:42
【问题描述】:

我最近开始使用 Kivy,并且一直在努力在专用于它的 MDCard 中打开 matplotlib 图。所有可用代码仅在 App 类中运行 matplotlib 图形类,但我想从我进入的第二个屏幕访问它,然后按适用于它的 MDCard。在这里,当我按下按钮时,什么都没有显示。这是我的代码。请让我知道我应该做什么:

项目.py:

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.card import MDCard
from kivymd.uix.boxlayout import MDBoxLayout
import matplotlib.pyplot as plt
import numpy as np
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
import webbrowser

Window.clearcolor = (1, 1, 1, 1)
Window.size = (360, 600)

class ScreenOne(Screen):
    pass

class ScreenTwo(Screen):
    pass

x = [1,2,3,4,5]
y = [5, 12, 6, 9, 15]

signal_x = np.array(x)
signal_y = np.array(y)

plt.plot(signal_x,signal_y)

plt.xlabel(\"X-Axis\")
plt.ylabel(\"Y-Axis\")

plt.grid(True, color=\'lightgray\')

class ScreenThree(Screen):
    def graph(self):
        app = MDApp.get_running_app()
        box = MDBoxLayout()
        box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
        return box


sm = ScreenManager()
sm.add_widget(ScreenOne(name=\'screen1\'))
sm.add_widget(ScreenTwo(name=\'screen2\'))
sm.add_widget(ScreenThree(name=\'screen3\'))


class KivyApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = \"Cyan\"
        self.theme_cls.primary_hue = \"A700\"
        self.theme_cls.theme_style = \"Light\"
        return Builder.load_file(\'project.kv\')
    
    def url_Function(self):
        webbrowser.open(\'http://www.google.com\')
    

    


KivyApp().run()

项目.kv:

ScreenManager:
    ScreenOne:
    ScreenTwo:
    ScreenThree:

<ScreenOne>:
    name: \'screen1\'
    MDFillRoundFlatButton:
        text: \'Get Started\'
        pos_hint: {\'center_x\':0.5,\'center_y\':0.4}
        on_press: root.manager.current = \'screen2\'

<ScreenTwo>:
    name: \'screen2\'
    ScrollView:
        size: self.size
        GridLayout:
            size_hint_y: None
            height: self.minimum_height
            width: self.minimum_width
            cols: 1
            spacing: \"20dp\"
            padding: \"20dp\"

            MDCard:
                orientation: \"vertical\"
                padding: \"8dp\"
                size_hint: 1, None
                height: \"210dp\"
                elevation: 5
                border_radius: 10
                radius: [15]
                ripple_behavior: True
                on_press: app.url_Function()

                MDLabel:
                    text: \'Link\'
                    bold: True
                    color: (64/255, 75/255, 122/255, 1)
                    font_size: 20
                    halign: \'center\'

            MDCard:
                orientation: \"vertical\"
                padding: \"8dp\"
                size_hint: 1, None
                height: \"210dp\"
                elevation: 5
                border_radius: 10
                radius: [15]
                ripple_behavior: True
                on_press: root.manager.current = \'screen3\'

                MDLabel:
                    text: \'Plot\'
                    bold: True
                    color: (64/255, 75/255, 122/255, 1)
                    font_size: 20
                    halign: \'center\'
                    valign: \'middle\'

<ScreenThree>
    name: \'screen3\'
    id: _box
    Button:
        text: \'Do it\'
        on_release: _box.graph()

    标签: python matplotlib kivy kivy-language kivymd


    【解决方案1】:

    您缺少一个包含FigureCanvasKivyAgg 对象的框。

    项目.py

    class ScreenThree(Screen):
        def graph(self):
            self.ids.box_plot.add_widget(FigureCanvasKivyAgg(plt.gcf()))
            plt.close()
    

    项目.kv

    <ScreenThree>:
        name: 'screen3'
        id: _box
        Button:
            text: 'Do it'
            on_release: _box.graph()
        MDBoxLayout:
            id: box_plot
    

    这将在您单击第三个屏幕的“执行”按钮后显示该图。

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多