更改屏幕并在kivyMD上运行功能?

时间:2020-09-18 22:00:37

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

我正在学习Kivy,但是我不知道如何同时切换屏幕和运行功能。

我应该在哪里声明我的功能,以便按钮可以访问代码并可以运行该功能?

from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

screen_helper = """
ScreenManager:
    MenuScreen:
    FunctionScreen:

<MenuScreen>:
    name: 'menu'
    MDRectangleFlatButton:
        text: 'Function'
        pos_hint: {'center_x':0.5,'center_y':0.5}
        on_press: root.manager.current = 'function screen'

<FunctionScreen>:
    name: 'function screen'
    MDRectangleFlatButton:
        text: 'Back'
        pos_hint: {'center_x':0.5,'center_y':0.1}
        on_press: root.manager.current = 'menu'

"""


class MenuScreen(Screen):
    pass


class FunctionScreen(Screen):
    pass


# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(FunctionScreen(name='function'))


class DemoApp(MDApp):

    def build(self):
        screen = Builder.load_string(screen_helper)
        return screen

    # def funtion(self):
        # do stuff and then go to menu screen



DemoApp().run()

我应该尝试在构建函数中添加on_opress属性吗?

你们能帮我吗?

1 个答案:

答案 0 :(得分:1)

有几个方便的地方可以放置function()。一个在MenuScreen中,在这种情况下,它将在kv文件中引用为:

root.function()

另一个方便的地方是DemoApp,在这种情况下,引用将是:

app.function()

因此,这是您的代码的版本,将function()放在App中:

from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen

screen_helper = """
ScreenManager:
    MenuScreen:
    FunctionScreen:

<MenuScreen>:
    name: 'menu'
    MDRectangleFlatButton:
        text: 'Function'
        pos_hint: {'center_x':0.5,'center_y':0.5}
        on_press:
            root.manager.current = 'function screen'
            app.function()

<FunctionScreen>:
    name: 'function screen'
    MDRectangleFlatButton:
        text: 'Back'
        pos_hint: {'center_x':0.5,'center_y':0.1}
        on_press: root.manager.current = 'menu'

"""


class MenuScreen(Screen):
    pass


class FunctionScreen(Screen):
    pass


class DemoApp(MDApp):

    def build(self):
        sm = Builder.load_string(screen_helper)
        return sm

    def function(self):
        # do stuff and then go to menu screen
        print('in function')


DemoApp().run()

请注意,构建ScreenManager的代码行已被删除,因为它们是不必要的。