首页 > 解决方案 > 为什么我的应用程序的屏幕会连接在一起?

问题描述

我正在使用 kivy 为应用程序制作登录和注册页面,但是当我运行程序时,两个屏幕都连接在一起。请帮我。这是我的python代码:-

from kivy.app import App
from kivy.lang import Builder
from kivy.core.text import LabelBase
from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_file('design.kv')

LabelBase.register(name= "oswald",
fn_regular= "oswald/Oswald-Regular.ttf")


class LoginScreen(Screen):
    def sign_up(self):
        self.manager.current = "signup_screen"

class SignupScreen(Screen):
    pass

class RootWidget(Screen):
    pass

class MainApp(App):
    def build(self):
        return RootWidget()

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

这是我的 kivy 代码:-

<LoginScreen>:
    GridLayout:
        cols: 1
        GridLayout:
            cols: 1
            Label: 
                text: "User Login"
            TextInput:
                hint_text: "Username"
            TextInput:
                hint_text: "Password"
            Button:
                text: "Login"
        GridLayout:
            cols: 2
            Button:
                text: "Forgot Password?"
            Button: 
                text: "Signup here"
                on_press: root.sign_up()


<SignupScreen>:
    GridLayout:
        cols:1
        Label:
            text: "Signup for lots of fun!!!"
        TextInput:
            hint_text: "Username"
        TextInput:
            hint_text: "Password"
        Button:
            text: "Signup"

<RootWidget>:
    LoginScreen:
        name: "login_screen"
    SignupScreen:
        name: "signup_screen"

这就是它应该看起来的样子:-

登录页面

注册页面

但这是错误页面:-

错误页面

请帮我。

标签: python-3.xkivy

解决方案


尝试改变:

class RootWidget(Screen):
    pass

至:

class RootWidget(ScreenManager):
    pass

当我相信您想将它们添加Screens到 a时,您正在添加到 a 中。ScreenScreenManager


推荐阅读