0

如何在课堂上访问 Helper 中的按钮?我想稍后更改按钮的颜色。我想在一段时间后更改 id 为 reflex_button 的按钮的颜色,但我唯一的问题是如何在 ReflexScreen 类中获取具有此 id 值的按钮。

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen,ScreenManager


Window.size = (300, 500)

helper = """
ScreenManager:
    MenuScreen:
    ReflexScreen:
    
<ReflexScreen>:
    name: 'reflex'
    Button:
        id: reflex_button
        text: 'Wait Change The Color'
        font_size: '20sp'
        pos_hint: {'center_x':0.5, 'center_y':0.5}
        on_press: root.manager.current = 'menu'
        size_hint_x: None
        size_hint_y: None
        width: 300
        height: 500
        background_color: 1,0,0,0.8
<MenuScreen>
    name: 'menu'
    Screen:
        NavigationLayout:
            ScreenManager:
                Screen:
                    BoxLayout:
                        orientation: 'vertical'
                        MDToolbar:
                            title: 'Test Your Reflex'
                            left_action_items: [["menu", lambda x: nav_drawer.toggle_nav_drawer()]]
                            right_action_items: [["dots-vertical", lambda x: nav_drawer.toggle_nav_drawer()]]
                            elevation:10
    
                        Widget:
                
                    MDRectangleFlatButton:
                        text: 'Play'
                        on_press: root.manager.current = 'reflex'
                        size_hint_x: None
                        size_hint_y: None
                        width: 20
                        height: 30
                        pos_hint: {'center_x':0.5, 'center_y':0.5}
                        md_bg_color: 0.2,0.3,0.6,0.1
                        text_color: 0.2, 0.5, 0.6, 1
                        
                        
            

"""

class MenuScreen(Screen):
    pass
class ReflexScreen(Screen):
    pass


sm = ScreenManager()
sm.add_widget(ReflexScreen(name='reflex'))
sm.add_widget(MenuScreen(name='screen'))

class ReflexApp(MDApp):

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


ReflexApp().run()

我开始学习 Kivy,我是新手,如果你能提供帮助,我会很高兴。

4

1 回答 1

1
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen

from kivymd.app import MDApp

Window.size = (300, 500)

helper = """
ScreenManager:

    MenuScreen:

    ReflexScreen:


<ReflexScreen>:
    name: 'reflex'

    Button:
        id: reflex_button
        text: 'Wait Change The Color'
        font_size: '20sp'
        pos_hint: {'center_x':0.5, 'center_y':0.5}
        on_press: root.manager.current = 'menu'
        size_hint_x: None
        size_hint_y: None
        width: 300
        height: 500
        background_color: 1,0,0,0.8

<MenuScreen>
    name: 'menu'

    Screen:

        NavigationLayout:

            ScreenManager:
    
                Screen:

                    BoxLayout:
                        orientation: 'vertical'

                        MDToolbar:
                            title: 'Test Your Reflex'
                            left_action_items: [["menu", lambda x: nav_drawer.toggle_nav_drawer()]]
                            right_action_items: [["dots-vertical", lambda x: nav_drawer.toggle_nav_drawer()]]
                            elevation:10

                        Widget:

                    MDRectangleFlatButton:
                        text: 'Play'
                        on_press: root.manager.current = 'reflex'
                        size_hint_x: None
                        size_hint_y: None
                        width: 20
                        height: 30
                        pos_hint: {'center_x':0.5, 'center_y':0.5}
                        md_bg_color: 0.2,0.3,0.6,0.1
                        text_color: 0.2, 0.5, 0.6, 1
"""


class MenuScreen(Screen):
    pass


class ReflexScreen(Screen):
    def on_enter(self, *args):
        """Event fired when the screen is displayed: the entering animation is
        complete."""

        print(self.ids.reflex_button)


class ReflexApp(MDApp):

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


ReflexApp().run()
于 2020-08-12T18:17:07.083 回答