【发布时间】:2021-03-30 16:56:52
【问题描述】:
这是我第一次提问,也是 Python 和 Kivy 的初学者。
在使用 Kivy 运行程序时,我开发了一些按计划运行的屏幕。但是,添加新屏幕时,无法识别并返回此错误。
文件“kivy_event.pyx”,第 1154 行,在 kivy._event.EventObservers._dispatch 文件“C:\Users\MyName\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\uix\screenmanager.py”,第 1045 行,on_current screen = self.get_screen(value)
文件“C:\Users\MyName\AppData\Local\Programs\Python\Python39\lib\site-packages\kivy\uix\screenmanager.py”,第 1071 行,在 get_screen raise ScreenManagerException('没有名为 "%s" 的屏幕。' % name)
kivy.uix.screenmanager.ScreenManagerException:没有名称为“sign_up_screen_success”的屏幕。
这是我的 main.py 代码:
import os
os.chdir(r"C:\Users\MyName\Documents\mobile app")
from kivy.app import App
import json
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from datetime import datetime
Builder.load_file('design.kv')
class LoginScreen(Screen):
def sign_up(self):
self.manager.current = "sign_up_screen"
class RootWidget(ScreenManager):
pass
class SignUpScreen(Screen):
def add_user(self, uname, pword):
with open("users.json") as file:
users = json.load(file)
users[uname] = {'username': uname, 'password': pword,
'created': datetime.now().strftime("%Y-%m-%d %H-%M-%S")}
with open("users.json", 'w') as file:
json.dump(users, file)
self.manager.current = "sign_up_screen_success"
class SignUpScreenSuccess(Screen):
pass
class MainApp(App):
def build(self):
return RootWidget()
if __name__ == "__main__":
MainApp().run()
这是我的 .kv 代码:
<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: "Sign Up"
on_press: root.sign_up()
<SignUpScreen>:
GridLayout:
cols: 1
Label:
text: "Sign up for a space journey!"
TextInput:
id: username
hint_text: "Username"
TextInput:
id: password
hint_text: "Password"
Button:
text: "Submit"
on_press: root.add_user(root.ids.username.text, root.ids.password.text)
<SignUpScreenSuccess>:
GridLayout:
cols: 1
Label:
text: "Sign up successful!"
Button:
text: "Login page"
<RootWidget>:
LoginScreen:
name: "login_screen"
SignUpScreen:
name: "sign_up_screen"
SignUpScreenSuccess:
name: "sign_up_screen_success"
根据我收集到的信息,由于我在 .kv 代码的 RootWidget 中定义了“sign_up_screen_success”以对应于 SignUpScreenSuccess,因此我应该转到另一个屏幕。那么,为什么这不起作用?
SignUpScreen 和 LoginScreen 工作正常,但我看不出它们与 SignUpScreenSuccess 之间的代码有任何区别。
如果我需要澄清其他任何事情,请告诉我。
谢谢。
【问题讨论】:
标签: python python-3.x kivy kivy-language