(Kivy) 如何在 Kivy 的 canvas 上显示新内容?

(Kivy) How do I display new content on my canvas in Kivy?

这应该是一个很容易解决的问题。我是 Kivy 的新手。我试图在按下按钮时清除 canvas,然后显示一个新的小部件以实质上移动到另一个页面。当我 运行 它并按下按钮时,canvas 被清除,但我从 IntroPage 中什么也得不到。

Python 脚本:

import kivy
kivy.require('2.0.0')

from kivy.app import App

from kivy.uix.label import Label

from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty


class ABT(App):
    def build(self):
        return WelcomePage()


class WelcomePage(Widget):
    def btn(self):
        self.canvas.clear()
        print('pressed')
        return IntroPage()


class IntroPage(Widget):
    def __init__(self):
    pass


if __name__ == '__main__':
    ABT().run()

KV 文件:

<WelcomePage>
    canvas.before:
        Color:
            rgba: (.43,.51,.92,.26)
        Rectangle:
            pos: self.pos
            size: self.size
    GridLayout:
        cols:1
        size: root.width, root.height
        Image:
            source: 'abt1t.png'
            size_hint: (1,.8)

        Button:
            text:"begin"
            background_color: (.43,.51,.92,.26)
            size_hint: (1,.2)
            on_press: root.btn()

<IntroPage>
    GridLayout:
        cols:1
        Label:
            text:"This won't show up!"

btn 返回 IntroPage 将不起作用,因为 btn 不是构建方法。

实现多个页面的最好方法可能是使用ScreenManager:

from kivy.uix.screenmanager import ScreenManager, Screen


class ABT(App):
    def build(self):
        sm = ScreenManager()
        sm.add_widget(WelcomePage(name="welcome"))
        sm.add_widget(IntroPage(name="intro"))
        return sm


class WelcomePage(Screen):
    def btn(self):
        print('pressed')
        self.manager.current = "intro"


class IntroPage(Screen):
    def __init__(self):
        pass