为了账号安全,请及时绑定邮箱和手机立即绑定

插入带有 kv lang 的图形

插入带有 kv lang 的图形

狐的传说 2021-10-12 15:08:27
我正在尝试制作一个带有 2 个屏幕的 APP:第一个屏幕是一个按钮第二个屏幕显示图表当按下第一个屏幕的按钮时,第二个屏幕显示图形。我只能使用 matplotlib 用 1 个屏幕绘制图形。这是我的代码:from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.screenmanager import ScreenManager, Screenfrom kivy.lang import Builderimport matplotlib.pyplot as pltimport matplotlibmatplotlib.use("module://kivy.garden.matplotlib.backend_kivy")from kivy.garden.matplotlib import FigureCanvasKivyAggfrom kivy.uix.widget import Widgetclass Sensores(Screen):    passclass Grafico(Screen):    def build(self):        box = BoxLayout()        box.add_widget(FigureCanvasKivyAgg(plt.gcf()))        return boxclass Menu(ScreenManager):    passpresentation = Builder.load_file('sensor.kv')class sensor(App):    def build(self):        return presentationif __name__ == "__main__":    sensor().run()基维Menu:    Sensores:    Grafico:<Sensores>    name: 'sensores'    BoxLayout:        Button:            text: "Sensor 01"            on_release:                root.Grafico()<Grafico>    name: 'grafico'我希望在第二个屏幕中有图表。
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我发现您的代码有两个问题。首先,在您的kv文件中,Button操作不正确:


    Button:

        text: "Sensor 01"

        on_release:

            root.Grafico()

如果Button打算切换到另一个屏幕,则应该是:


    Button:

        text: "Sensor 01"

        on_release:

            root.manager.current='grafico'

其次,在您的Grafico班级中,您有一个build()从未被调用过的方法。如果您将其更改为:


class Grafico(Screen):

    def build(self):

        box = BoxLayout()

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

        return box

到:


class Grafico(Screen):

    def on_enter(self, *args):

        box = BoxLayout()

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

        self.add_widget(box)

我想你会得到想要的结果。关键是on_enter()在Grafico Screen显示时调用该方法。该方法是您的代码,但self.add_widget(box)添加了一个以将box加到屏幕上。有关更多信息,请参阅屏幕文档。


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号