如何用kivy切换屏幕?

时间:2021-07-31 19:06:20

标签: python python-3.x kivy kivy-language kivymd

嗨,我正在尝试在 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"

蟒蛇:

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。

2 个答案:

答案 0 :(得分:0)

您应该可以使用 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

答案 1 :(得分:0)

以下是您的应用“仅用于切换屏幕”的外观示例。

from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition

class FirstPage(MDFloatLayout):

    def switch_screen(self):
        myapp.screen_manager.transition = SlideTransition(direction='left', duration=.25)
        myapp.screen_manager.current = 'SecondPage'

class SecondPage(MDFloatLayout):

    def switch_back(self):
        myapp.screen_manager.transition = SlideTransition(direction='right', duration=.25)
        myapp.screen_manager.current = 'FirstPage'

class MyApp(MDApp):

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

        self.firstpage = FirstPage()
        screen = Screen(name='FirstPage')
        screen.add_widget(self.firstpage)
        self.screen_manager.add_widget(screen)

        self.secondpage = SecondPage()
        screen = Screen(name='SecondPage')
        screen.add_widget(self.secondpage)
        self.screen_manager.add_widget(screen)

        return self.screen_manager

myapp = MyApp()
myapp.run()

kivy 代码:

FirstPage:

<FirstPage>:

    Button:
        text: "First"
        on_release: root.switch_screen()

<SecondPage>:

    Button:
        text: "Second"
        on_release: root.switch_back()