kivyMD 获取列表项中每个按钮的 ID

kivyMD get ID of each button in a List Items

我正在使用 kivyMD 创建博客。

我用 ListItemWithCheckbox(或 OneLineListItem)显示我的 post 列表(这里没问题)。

现在我想获取用我的毛圈创建的每个按钮的 ID。

我分享下面的代码:

def show_records(self):
    
    connexion = config.connexion
    icons = list(md_icons.keys())
    
    try:  
        with connexion.cursor() as cursor: 

            sql = "SELECT ID, post_title, post_name, post_date FROM mod803_posts WHERE post_type='stock' AND post_status='publish' ORDER BY post_date DESC" 

            cursor.execute(sql) 
            for line in cursor:

                self.block_layout = ListItemWithCheckbox(text=f'{line}')
                
                self.strng.get_screen('accueilscreen').ids.scroll.add_widget(self.block_layout)
                self.block_layout.ids.text = str(line['post_name']).replace('-','')
                #print(self.block_layout)

    finally:     
        connexion.commit()


def get_id(self):
    print(self.block_layout.ids.text) HERE (It always prints the last post id)


def voir_unique(self):

    self.strng.get_screen('accueilscreen').ids.scr.current = 'stock'
    self.strng.get_screen('accueilscreen').ids.scr.transition.direction = 'left'
    

KV代码:

#The screen where the list of posts are created in the function show_records()
MDScreen:
    name: 'biens'

    ScrollView:
        MDList:
            id: scroll
    

以及我的按钮的 kv 代码:

<ListItemWithCheckbox>:
    id: mesboxes
    on_press:
        app.voir_unique()
        app.get_id()

    IconLeftWidget:
        icon: root.icon

    RightCheckbox:

当我单击列表中的一个 post 时,屏幕向左转到 'stock'。 我想获取 post 单击(或按钮)的 ID,以显示我单击的 post 的所有值...

我希望有人能帮助我。 谢谢 罗曼

您可以使用 MDList 小部件的儿童列表。

for child in self.ids.scroll.children:
    print(f'{child}')

我找到了解决问题的方法:

for self.line in cursor:

    ID = self.line['ID']
                
    title = self.line['post_title']
            

    #i = NewApp()
    #j = i.stock_unique(ID, title)

    # here I SOLVED THE PROBLEM, so when I click on each OnlineListItem, I get the current ID 

    self.block_layout = OneLineListItem(text=f'{ID, title}', on_press=(lambda ID=ID: lambda x: print(ID))())

    self.strng.get_screen('accueilscreen').ids.scroll.add_widget(self.block_layout)
                
                print(ID, title)