как показать сюжет в другом экране кивы - PullRequest
0 голосов
/ 30 апреля 2020

Я пытался показать график на втором экране после того, как нажал кнопку на первом экране. это код, который я попробовал. импортировать kivy из kivy.app import app из kivy.uix.label import Label из kivy.uix.gridlayout import GridLayout из kivy.uix.textinput import TextInput из kivy.uix.button import Button из kivy.uix.boxlayout импортировать BoxLayout из kivy .properties import ObjectProperty из kivy.lang import Builder из kivy.uix.screenmanager import ScreenManager, Экран из kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg из kivy.uix.widget импорт виджета из pandas импорт read_exp

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 Ответ

1 голос
/ 30 апреля 2020

Проблема в том, что вы пытаетесь использовать 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()))
...