如何 link 筛选以列出 Kivymd 列表中的项目

How to link screen to list items in a Kivymd list

我正在使用 ScreenManager。我想 link 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。

OneLineListItem class 实际上扩展了 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,这次真的用到了