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)
我正在使用 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)