如何在其他屏幕kivy中显示情节

Posted

技术标签:

【中文标题】如何在其他屏幕kivy中显示情节【英文标题】:how to show plot in other screen kivy 【发布时间】:2020-08-14 15:26:35 【问题描述】:

单击第一个屏幕中的按钮后,我尝试在第二个屏幕中显示绘图。 这是我尝试过的代码。 进口猕猴桃 从 kivy.app 导入应用程序 从 kivy.uix.label 导入标签 从 kivy.uix.gridlayout 导入 GridLayout 从 kivy.uix.textinput 导入 TextInput 从 kivy.uix.button 导入按钮 从 kivy.uix.boxlayout 导入 BoxLayout 从 kivy.properties 导入 ObjectProperty 从 kivy.lang 导入生成器 从 kivy.uix.screenmanager 导入 ScreenManager,Screen 从 kivy.garden.matplotlib.backend_kivyagg 导入 FigureCanvasKivyAgg 从 kivy.uix.widget 导入小部件 从熊猫导入 read_excel 将 matplotlib.pyplot 导入为 plt

plt.plot([1, 23, 2, 4])
plt.ylabel('some numbers')

class MainWindow(Screen):
    def btn(self):
        print("name: ",self.name2.text)
        self.ids.destination.add_widget(FigureCanvasKivyAgg(plt.gcf()))

class SecondWindow(Screen):
    pass

class WindowManager(ScreenManager):
    pass

kv = Builder.load_file("my.kv")

class MyMainApp(App):
    def build(self):
        return kv

if __name__=="__main__":
    MyMainApp().run()


    #:kivy 1.9.1
WindowManager:
    MainWindow:
    SecondWindow:

<MainWindow>:
    name: "main"
    name2: name2

    GridLayout:
        cols:1
        size: root.width, root.height

        GridLayout:
            cols:2

            Label:
                text:"name: "

            TextInput:
                id: name
                multinline:False

            Label:
                text:"name2: "

            TextInput:
                id: name2
                multinline:False

        Button:
            text:"Submit"

            on_release:
                root.btn()
                app.root.current = "second"
                root.manager.transition.direction = "left"

<SecondWindow>:
    name: "second"

    GridLayout:
        cols:1

        BoxLayout:
            id: destination

        Button:
            text: "Go Back"
            on_release:
                app.root.current = "main"
                root.manager.transition.direction = "right"

但我收到错误消息说'super' object has no attribute '__getattr__',我不知道这是什么意思。请帮帮我。

【问题讨论】:

【参考方案1】:

问题是您尝试使用在不同的Screen 中定义的iddestination 是在 SecondWindow 中定义的,所以 MainWindow 对此一无所知。因此,您可以像这样通过SecondWindow 引用id

class MainWindow(Screen):
    def btn(self):
        print("name: ",self.name2.text)
        self.manager.get_screen('second').ids.destination.add_widget(FigureCanvasKivyAgg(plt.gcf()))

【讨论】:

以上是关于如何在其他屏幕kivy中显示情节的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中保持kivy服务在后台运行(切换到其他应用程序或锁定屏幕时服务仍然运行)?

在 Kivy 中,我如何从另一个以 kv 语言显示的另一个屏幕获取变量

如何使用 kivy 和 python 在屏幕上显示文件的内容?

如果在 kivy 文件中定义了屏幕管理器,如何在 Python 中更改屏幕?

Kivy - 如何根据显示大小设置窗口大小?

如何使用 kivy StringProperty?