【问题标题】:Changing the screen and running a function on kivyMD?更改屏幕并在 kivyMD 上运行功能?
【发布时间】:2020-09-18 22:00:37
【问题描述】:

我正在学习 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 属性吗?

你们能帮帮我吗?

【问题讨论】:

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


    【解决方案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 的代码行已被删除,因为它们是不必要的。

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      相关资源
      最近更新 更多