首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用kivymd创建Splash屏幕

如何使用kivymd创建Splash屏幕
EN

Stack Overflow用户
提问于 2021-07-03 15:25:25
回答 2查看 1.3K关注 0票数 0

我对kivymd很陌生,我正在尝试使用kivymd创建一个启动屏幕。但是所有的教程在点击一个按钮后都会显示屏幕转换。我想要的是.kv文件中的模块化代码,以便WindowManager首先打开Splash屏幕,等待5秒,然后打开应用程序的主屏幕。我尝试了以下代码,但我无法理解如何使用时钟类首先打开Splash屏幕,然后等待5秒,最后移动到主屏幕?PS -我在StackOverflow上看到了这个问题,但这并不能解决我的目的如何在KivyMD中添加Splash屏幕

Main.py

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<WindowManager>:
    SplashScreen:
    HomeScreen

<SplashScreen>:
    MDLabel:
        text: "Splash Screen"

<HomeScreen>:
    MDLabel:
        text: "Home Screen"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-03 17:48:43

您可以使用on_enter()方法的Screen,如下所示:

代码语言:javascript
运行
复制
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所需的一些更改

代码语言:javascript
运行
复制
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()的调用:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-07-03 18:11:36

下面是您当前代码的一些缺陷:

  • 由于您正在加载kivy代码并在应用程序的build方法中返回它,所以您需要在kivy代码中有一个根小部件。
  • 您的自定义屏幕类必须从Kivy的Screen类(kivy.uix.screenmanager.Screen)继承。
  • 确保在所有类声明之后加载您的kivy代码,因为您的kivy代码需要这些类,因此如果您的python代码中找不到所需的类,它们就会引发错误。

现在来问您的问题,因为您希望在固定的时间之后自动更改屏幕,您可以使用Clock.schedule_once

更新代码:

Kivy -使WindowManager成为根用户并给屏幕命名

代码语言:javascript
运行
复制
WindowManager:
    SplashScreen:
        name: "splash"
    HomeScreen:
        name: "home"

<SplashScreen>:
    MDLabel:
        text: "Splash Screen"

<HomeScreen>:
    MDLabel:
        text: "Home Screen"

python

代码语言:javascript
运行
复制
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移动应用程序,因为除了默认启动时间之外,这只会为用户增加额外的等待时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68237587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档