我对kivymd很陌生,我正在尝试使用kivymd创建一个启动屏幕。但是所有的教程在点击一个按钮后都会显示屏幕转换。我想要的是.kv文件中的模块化代码,以便WindowManager首先打开Splash屏幕,等待5秒,然后打开应用程序的主屏幕。我尝试了以下代码,但我无法理解如何使用时钟类首先打开Splash屏幕,然后等待5秒,最后移动到主屏幕?PS -我在StackOverflow上看到了这个问题,但这并不能解决我的目的如何在KivyMD中添加Splash屏幕
Main.py
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager
from kivy.core.window import Window
from kivy.lang.builder import Builder
from kivy.clock import Clock
import time
main_kv = Builder.load_file(r'.\kv\main.kv')
Window.size = (400, 700)
class SplashScreen():
"""This class will show the splash screen of Docto365"""
class HomeScreen():
"""This class will show the Home screen of Doctor365"""
class WindowManager(ScreenManager):
"""This class will handle the screen transitions"""
class Test(MDApp):
def build(self):
self.theme_cls.primary_palette = 'Indigo'
self.theme_cls.accent_palette = 'Blue'
self.theme_cls.theme_style = 'Light'
return main_kv
if __name__ == '__main__':
Test().run()
main.kv
<WindowManager>:
SplashScreen:
HomeScreen
<SplashScreen>:
MDLabel:
text: "Splash Screen"
<HomeScreen>:
MDLabel:
text: "Home Screen"
发布于 2021-07-03 17:48:43
您可以使用on_enter()
方法的Screen
,如下所示:
class SplashScreen(Screen):
"""This class will show the splash screen of Docto365"""
def on_enter(self, *args):
Clock.schedule_once(self.switch_to_home, 5)
def switch_to_home(self, dt):
self.manager.current = 'Home'
以及对.kv
所需的一些更改
WindowManager: # eliminate "<>" to make this a root widget
SplashScreen:
HomeScreen
<SplashScreen>:
name: 'Splash' # name is required
MDLabel:
text: "Splash Screen"
<HomeScreen>:
name: 'Home' # name is required
MDLabel:
text: "Home Screen"
并在builder.load_file()
方法中移动对build()
的调用:
class Test(MDApp):
def build(self):
main_kv = Builder.load_file(r'.\kv\main.kv')
self.theme_cls.primary_palette = 'Indigo'
self.theme_cls.accent_palette = 'Blue'
self.theme_cls.theme_style = 'Light'
return main_kv
发布于 2021-07-03 18:11:36
下面是您当前代码的一些缺陷:
build
方法中返回它,所以您需要在kivy代码中有一个根小部件。Screen
类(kivy.uix.screenmanager.Screen
)继承。现在来问您的问题,因为您希望在固定的时间之后自动更改屏幕,您可以使用Clock.schedule_once
。
更新代码:
Kivy
-使WindowManager
成为根用户并给屏幕命名
WindowManager:
SplashScreen:
name: "splash"
HomeScreen:
name: "home"
<SplashScreen>:
MDLabel:
text: "Splash Screen"
<HomeScreen>:
MDLabel:
text: "Home Screen"
python
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window
from kivy.lang.builder import Builder
from kivy.clock import Clock
import time
#main_kv = Builder.load_string(kv)
Window.size = (400, 700)
class SplashScreen(Screen):
"""This class will show the splash screen of Docto365"""
class HomeScreen(Screen):
"""This class will show the Home screen of Doctor365"""
class WindowManager(ScreenManager):
"""This class will handle the screen transitions"""
class Test(MDApp):
def build(self):
self.theme_cls.primary_palette = 'Indigo'
self.theme_cls.accent_palette = 'Blue'
self.theme_cls.theme_style = 'Light'
self.window_manager = Builder.load_string(kv)
Clock.schedule_once(self.go_to_home, 5)
return self.window_manager
def go_to_home(self, *args):
self.window_manager.current = 'home'
if __name__ == '__main__':
Test().run()
Note:您可以使用不同的屏幕转换使其看起来更像是从飞溅到家的褪色。
PS:我建议您不要将此功能用于kivy移动应用程序,因为除了默认启动时间之外,这只会为用户增加额外的等待时间。
https://stackoverflow.com/questions/68237587
复制相似问题