【问题标题】:How to link screen to list items in a Kivymd list如何链接屏幕以列出 Kivymd 列表中的项目
【发布时间】:2020-11-21 11:49:05
【问题描述】:

我正在使用 ScreenManager。我想将 OneLineListItem 中的项目链接到新屏幕。

这是我的 KV 文件

screen_helper = """
    ScreenManager:

       GroupsScreen:
       MyGroupScreen:

<GroupsScreen>:
name: 'groups'
ScrollView:
    MDList:
        id: container_groups
        
<MyGroupScreen>:
name: 'my_group'
ScrollView:
    MDList:
        id: container_group

MDRectangleFlatButton:
    text: 'Back'
    pos_hint: {'center_x':0.5,'center_y':0.1}
    on_press: root.manager.current = 'groups'                    

这是python文件

 class GroupsScreen(Screen):
     def on_enter(self, *args):
          for i in range(5):
              item = OneLineListItem(text='Gruppo ' + str(i))
              self.ids.container_groups.add_widget(item)





 class MyGroupScreen(Screen):
     pass

 sm = ScreenManager()
 sm.add_widget(GroupsScreen(name='groups'))
 sm.add_widget(MyGroupScreen(name='my_group'))

 class DemoApp(MDApp):

    def build(self):
        self.theme_cls.primary_palette = "Red"
        self.theme_cls.primary_hue = "500"
        screen = Builder.load_string(screen_helper)
        return screen

我想点击组屏幕中的一个项目并转到 MyGroupScreen。

【问题讨论】:

    标签: kivy kivymd


    【解决方案1】:

    OneLineListItem 类实际上扩展了ButtonBehavior,因此您可以将其视为Button。只需将on_presson_release 方法分配给OneLineListItem

    class GroupsScreen(Screen):
        def on_kv_post(self, *args):
            for i in range(5):
                item = OneLineListItem(text='Gruppo ' + str(i))
                item.on_release = self.switch_to_my_groups
                self.ids.container_groups.add_widget(item)
    
        def switch_to_my_groups(self, *args):
            self.manager.current = 'my_group'
    

    我将您的on_enter() 方法更改为on_kv_post() 以确保kv 规则已被执行(以便ids 可用)。

    另一个问题是线条:

     sm = ScreenManager()
     sm.add_widget(GroupsScreen(name='groups'))
     sm.add_widget(MyGroupScreen(name='my_group'))
    

    这些行应该被删除。他们尝试构建 GUI,然后不使用结果。行:

    screen = Builder.load_string(screen_helper)
    

    然后再次重建 GUI,这一次它被实际使用了。

    【讨论】:

    • 感谢您的回答。 on_release 方法适用于该任务,留下 on_enter() 方法。如果我使用 on_kv_post(),则会发生错误:''' ValueError: KivyMD: App object must be initialized before loading root widget。 '''。
    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    相关资源
    最近更新 更多