Qube
Qube

Reputation: 573

how to show plot in other screen kivy

i tried to show a plot in second screen after i clicked the button in the first screen. this is the code that i tried. import kivy from kivy.app import App from kivy.uix.label import Label from kivy.uix.gridlayout import GridLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.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"

but i got error says 'super' object has no attribute '__getattr__' and i don't know what it means. please help me.

Upvotes: 0

Views: 769

Answers (1)

John Anderson
John Anderson

Reputation: 39117

The problem is that you are trying to use an id that is defined in a different Screen. The destination is defined in SecondWindow, so MainWindow knows nothing about it. So, you can reference that id by going through SecondWindow like this:

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

Upvotes: 1

Related Questions