kivy如何切换屏幕?

Posted

技术标签:

【中文标题】kivy如何切换屏幕?【英文标题】:How to switch screen with kivy? 【发布时间】:2021-10-06 19:59:27 【问题描述】:

您好,我正在尝试在 kivy 中切换屏幕,但它在这里不起作用,我认为这是必要的代码: .KV:

WindowManager:
    MainScreen:
    FileScreen:








<MainScreen>:
    name: "MainScreen"
    MDFloatingActionButtonSpeedDial:
        bg_hint_color: app.theme_cls.primary_light
        data: app.data
        root_button_anim: True
        callback: app.btn

<FileScreen>:
    name: "FileScreen"
    MDBoxLayout:
        MDLabel:
            text: "test"

Python:

class MainScreen(Screen):
    def switch(self):
        self.current = "FileScreen"

class FileScreen(Screen):
    pass
class WindowManager(ScreenManager):
    pass

class app(MDApp):
    data = 
        'Create': 'file-document',
        'Open': 'folder-open'
        
    
    def btn(self, instance):
        print('callback')
        icon = instance.icon
        # if you want check button, use
        if isinstance(instance, MDFloatingBottomButton):

            if icon == 'file-document':
                print('Create')
                MainScreen.switch(self)
                
                
            elif icon == 'folder-open':
                print('Open')

我真的不知道在这个 kivy 领域该做什么,所以希望社区可以帮助我。 如果您想知道,我也在使用 KivyMD。

【问题讨论】:

这实际上并不是 Kivy 特有的任何东西,而是一个普遍的 Python 错误:你调用 MainScreen.switch(self) 所以 self 是你的 app 类实例,所以你实际上在做的是等价的到app.current = "FileScreen" 这显然没有做任何事情。您需要调用您在 gui 中显示的 MainScreen 类的 instanceswitch 方法。 我不知道你是怎么做到的,因为我对 python @inclement 还很陌生 这个问题很快就会被关闭,因为它是answered 【参考方案1】:

您应该可以使用ScreenManager 来完成此操作。所以你的代码看起来像这样:

from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition

class MainScreen(Screen):

    def switch_button(self):
        app.screen_manager.transition = SlideTransition(direction='left', duration=.25)  #this is speed of transition between screens. if you remove this, kivy will set it to default. And you can change direction too
        app.screen_manager.current = 'FileScreen'

class FileScreen(Screen):
    pass

class app(MDApp):

    def build(self):
        self.screen_manager = ScreenManager()

        self.mainscreen = MainScreen()
        screen = Screen(name='MainScreen')
        screen.add_widget(self.mainscreen)
        self.screen_manager.add_widget(screen)

        self.filescreen = FileScreen()
        screen = Screen(name='FileScreen')
        screen.add_widget(self.filescreen)
        self.screen_manager.add_widget(screen)

        return self.screen_manager

您的kivy 代码应如下所示:

<MainScreen>:
    name: "MainScreen"
    MDFloatingActionButtonSpeedDial:
        bg_hint_color: app.theme_cls.primary_light
        data: app.data
        root_button_anim: True
        callback: app.btn
        on_release: root.switch_button()

<FileScreen>:
    name: "FileScreen"
    MDBoxLayout:
        MDLabel:
            text: "test"

如果你想要更好的解释点击here

【讨论】:

Supatashavili 它在这里不起作用的是当前代码:pastebin.com/hUkBJRph 不,只是白屏。 @Gurami Supatashvili

以上是关于kivy如何切换屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 代码在 Kivy 中切换屏幕

为啥切换屏幕在 kivy 中不起作用?

如何在Android中保持kivy服务在后台运行(切换到其他应用程序或锁定屏幕时服务仍然运行)?

在kivy中制作一个切换到不同屏幕的按钮列表视图

在单独的 .kv (Kivy) 文件中定义的屏幕之间切换

Kivy/ Kivymd 地图切换屏幕