KivyMD 中的自动 Sweep/Scroll 轮播 (Python)

Auto Sweep/Scroll Carousel in KivyMD (Python)

我想在 KivyMDPython 中制作一个自动滚动的 2 幻灯片轮播。启动时,应用程序从轮播的第一张幻灯片开始,3 秒后应更改为第二张幻灯片。

这是我的代码

.kv

<WelcomeScreen>:
    MDFloatLayout:
        md_bg_color : 1, 1, 1, 1
    Carousel:
        id: caraousel
        on_current_slide: app.current_slide(self.index)
        MDFloatLayout:
            Image:
                source: "Assets/1.png"
                pos_hint: {"center_x": .5, "center_y": .6}
                size_hint: .3, .3

            MDLabel:
                text: "Slide 1"
                pos_hint: {"center_y": .087}
                halign: "center"
                font_name: "Poppins-Light"
                font_size: "14sp"
                color: rgba(135, 143, 158, 200)
        MDFloatLayout:
            Image:
                source: "Assets/2.jpg"
                pos_hint: {"center_x": .5, "center_y": .7}
                size_hint: .8, .8
            MDLabel:
                text: "Slide 2"
                pos_hint: {"center_y": .47}
                halign: "center"
                font_name: "Poppins-Regular"
                font_size: "25px"
                color: rgba(1, 3, 23, 225)

.py

from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen,ScreenManager, NoTransition
from kivy.utils import rgba
from kivy.core.window import Window
from kivy.core.text import LabelBase
from kivy.clock import Clock

Window.size = (310, 580)

class WelcomeScreen(Screen):
    pass

class AppApp (MDApp):
    def build(self):
        return Builder.load_file('app.kv')

    def current_slide(self, index):
        pass

AppApp().run()

谁能帮我解决这个问题?提前致谢。

您可以使用方法Clock.schedule_interval 执行滑块的自动加载。从代码中的任何位置触发该操作,例如从一开始就触发它,从 class 应用程序的方法 on_start 触发它,

app.kv 文件.

<WelcomeScreen>:
    MDFloatLayout:
        md_bg_color : 1, 1, 1, 1
    Carousel:
        id: caraousel
        on_current_slide: app.current_slide(self.index)
        MDFloatLayout:
            Image:
                source: "Assets/1.png"
                pos_hint: {"center_x": .5, "center_y": .6}
                size_hint: .3, .3

            MDLabel:
                text: "Slide 1"
                pos_hint: {"center_y": .087}
                halign: "center"
#                font_name: "Poppins-Light"
                font_size: "14sp"
                color: rgba(135, 143, 158, 200)
        MDFloatLayout:
            Image:
                source: "Assets/2.jpg"
                pos_hint: {"center_x": .5, "center_y": .7}
                size_hint: .8, .8
            MDLabel:
                text: "Slide 2"
                pos_hint: {"center_y": .47}
                halign: "center"
#                font_name: "Poppins-Regular"
                font_size: "25px"
                color: rgba(1, 3, 23, 225)

main.py 文件.

from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen,ScreenManager, NoTransition
from kivy.utils import rgba
from kivy.core.window import Window
from kivy.core.text import LabelBase
from kivy.clock import Clock

Window.size = (310, 580)

class WelcomeScreen(Screen):
    pass

class AppApp(MDApp):
    def build(self):
        Builder.load_file('app.kv')
        return WelcomeScreen()

    def on_start(self):
        # Access the carousel.
        carousel = self.root.ids.caraousel
        # Set infinite looping (optional).
        carousel.loop = True
        # Schedule after every 3 seconds.
        Clock.schedule_interval(carousel.load_next, 3.0)


    def current_slide(self, index):
        pass

AppApp().run()

更新:

尝试避免将应用程序的实例名称同时命名为 AppApp 并将相关的 .kv 文件命名为 app.kv,这可能会导致在自动加载 .kv 时出现问题。但是显式加载文件然后从方法 build 返回根目录(或在 .kv 文件中声明)应该可以工作。