首页 > 解决方案 > 如何在其他屏幕kivy中显示情节

问题描述

单击第一个屏幕中的按钮后,我尝试在第二个屏幕中显示绘图。这是我尝试过的代码。从 kivy.app 导入 kivy 从 kivy.uix.label 导入 App 从 kivy.uix.gridlayout 导入标签 从 kivy.uix.textinput 导入 GridLayout 从 kivy.uix.button 导入 TextInput 从 kivy.uix.boxlayout 导入按钮 从 kivy 导入 BoxLayout .properties import ObjectProperty from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg from kivy.uix.widget import Widget from pandas import read_excel import matplotlib.pyplot as 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__',我不知道这意味着什么。请帮我。

标签: pythonkivykivy-language

解决方案


问题是您正在尝试使用id在不同的Screen. destination定义在 中SecondWindow,所以对此MainWindow一无所知。因此,您可以id通过以下方式引用它SecondWindow

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

推荐阅读