我在试用ScreenManager的时候,名字出了点问题。我的应用程序应该以HelloScreen启动,3秒后它会自动转换为MainScreen。
这些在我的main.py中:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock
class MainScreen(Screen):
pass
class HelloScreen(Screen):
pass
class MemoryManagementSystem(ScreenManager):
def __init__(self, **kwargs):
super(MemoryManagementSystem, self).__init__(**kwargs)
Clock.schedule_once(self.transit_scene, 3)
def transit_scene(self, *args):
self.current = "main_screen"
class MemoryManagementSystemApp(App):
def build(self):
return MemoryManagementSystem()
if __name__ == '__main__':
MemoryManagementSystemApp().run()
这些都在我的kv文件中:
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
MemoryManagementSystem:
transition: FadeTransition()
HelloScreen:
name: "hello_screen"
MainScreen:
name: "main_screen"
<HelloScreen>:
BoxLayout:
Label:
text: "Project"
font_size: 50
<MainScreen>:
如果我运行这些程序,屏幕完全是黑色的,没有显示任何标签,3秒后应用程序崩溃,我得到的结果是:
File "C:\Users\98742\Anaconda3\lib\site-packages\kivy\uix\screenmanager.py", line 1037, in on_current
screen = self.get_screen(value)
File "C:\Users\98742\Anaconda3\lib\site-packages\kivy\uix\screenmanager.py", line 1063, in get_screen
raise ScreenManagerException('No Screen with name "%s".' % name)
kivy.uix.screenmanager.ScreenManagerException: No Screen with name "main_screen".
但我已经在.kv文件中添加了一个名为"main_screen“的屏幕...我就是不明白。
我读了其他问题,发现可以通过在main.py中添加屏幕来解决这个问题,如下所示:
class MemoryManagementSystem(ScreenManager):
def __init__(self, **kwargs):
super(MemoryManagementSystem, self).__init__(**kwargs)
self.add_widget(HelloScreen(name='hello_screen'))
self.add_widget(MainScreen(name="main_screen"))
Clock.schedule_once(self.transit_scene, 3)
def transit_scene(self, *args):
self.current = "main_screen"
它确实起作用了。但我只是不知道为什么我的版本不能工作?(它没有显示标签,它崩溃了)。这与初始化和.kv文件有什么关系吗?
谢谢你的解释。
https://stackoverflow.com/questions/50616240
复制相似问题