回调列表项的循环值(Kivy & KivyMD)

callback for loop values of List Item's (Kivy & KivyMD)

这里我有一个循环,它从 JSON 列表

中查找键和值

目前,KivyMD 列表的视图是正确的,但我想将正确的键传递到打印上,而不是打印出 JSON 中的 last key .

ScrollView:
    MDList:
        id: container
   def on_start(self):
        for (self.k, v) in self.data.items():  

            item = TwoLineAvatarListItem(text=str(self.k),secondary_text=str(v["NAME"]),on_release=self.show_data)
            image = ImageLeftWidget(source=v["Image"])
            item.add_widget(image)
            self.root.ids.container.add_widget(item)

    def show_data(self,obj):
        print(self.k)

值: E101a 始终打印

总而言之,我想单独查看“容器值”

乔纳斯!我已经用这个解决了:

on_release=lambda x, value_for_pass=value: self.passValue(value_for_pass)

在这样的循环中:

.py 文件:

# (...)
class AllClientsScreen(Screen):
    
    def on_enter(self):
        self.show_clients()

    def show_clients(self):
        for i in range(10):
            client_id = i
            name = "Roger" + str(client_id) + " id: " + str(client_id)
            last_name = "Rabbit" + str(client_id)
            phone = "555" + str(client_id)
            email = "roger" + str(client_id) + "@rabbit.com"
            item = ThreeLineListItem(
            text = name + " " + last_name,
            secondary_text = phone,
            tertiary_text = email,
            on_release=lambda x, value_for_pass=name: self.passValue(value_for_pass)
            )
                
            self.ids.container.add_widget(item)
    
    def passValue(self, *args):
        args_str = ','.join(map(str,args))
        screen2 = self.manager.get_screen ('oneclient')
        screen2.ids.client_id.text = args_str
        self.manager.current = 'oneclient'
        print(args)

.kv 文件:

#:import NoTransition kivy.uix.screenmanager.NoTransition

ScreenManager:
    transition: NoTransition()
    MenuScreen:
    AllClientsScreen:
    OneClientScreen:

<MenuScreen>:
    name: 'menu'
    MDRectangleFlatButton:
        text: 'All Clients'
        pos_hint: {'center_x': 0.5, 'center_y':0.5}
        on_release: root.manager.current = 'allclients'
    
<AllClientsScreen>:
    name: 'allclients'
    ScrollView:
        MDList:
            id: container
            padding: dp(20)

    MDLabel:
        id: clientsdata
        text: 'All Clients'
        halign: 'center'
    MDRectangleFlatButton:
        text: 'Menu'
        pos_hint: {'center_x': 0.5, 'center_y':0.4}
        on_release: root.manager.current = 'menu'

<OneClientScreen>:
    name: 'oneclient'
    MDLabel:
        id: client_id
        text: 'Cliente'
        halign: 'center'
    ScrollView:
        MDList:
            id: container
            padding: dp(40)
    MDRectangleFlatButton:
        text: 'Menu'
        pos_hint: {'center_x': 0.5, 'center_y':0.4}
        on_release: root.manager.current = 'menu'

我刚刚发布了代码的重要部分,如果您有任何疑问或成功了,请告诉我。 祝你发展顺利!