Нужна помощь в удалении виджетов kivy
У меня есть два файла main.py и demo.kv. При выполнении функции add_item у меня происходит добавление 4ех виджетов (MDLabel - 3шт и MDRaisedButton - 1шт) и они образуют строку. И я хочу сделать так, чтобы при нажатии на кнопку MDRaisedButton(text='—') происходило удаление именно этой строки и следовательно оставались остальные добавленные строки. Например, если я добавлю три строки и нажму вторую по счету кнопку, то должны остаться на экране 1 и 3 строки. Единственное, что я смог реализовать это полное удаление всех строк на экране. Если кто знает решение - то прошу помочь. Заранее спасибо)
main.py
from kivy.lang import Builder
from kivy.core.window import Window
from kivymd.app import MDApp
from kivymd.uix.label import MDLabel
from kivymd.uix.button import MDRaisedButton
Window.size = (340, 600)
# итоговая цена клиента
finalPrice = []
# итоговый заказ клиента
finalItems = []
# кол-во товаров
finalCounter = []
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette = 'Blue'
return Builder.load_file('demo.kv')
#функция добавления товаров
def add_item(self, name, price, counter):
mdRB = MDRaisedButton(text='—')
mdRB.bind(on_press=self.delete_mdRB)
self.root.ids.basketItems.add_widget(
MDLabel(text=name, adaptive_height=True, adaptive_width=True)
)
self.root.ids.basketItems.add_widget(
MDLabel(text=price, adaptive_height=True, adaptive_width=True, width=60, size_hint_x=None)
)
self.root.ids.basketItems.add_widget(
MDLabel(text=counter, adaptive_height=True, adaptive_width=True, width=120, size_hint_x=None)
)
self.root.ids.basketItems.add_widget(
mdRB
)
def delete_mdRB(self):
for child in [child for child in self.root.ids.basketItems.children]:
self.root.ids.basketItems.remove_widget(child)
# очистка итоговой цены клиента
finalPrice.clear()
print(finalPrice)
# очистка корзины клиента
finalItems.clear()
print(finalItems)
# очистка кол-во товара
finalCounter.clear()
print(finalCounter)
if __name__ == '__main__':
MainApp().run()
demo.kv
#:import Factory kivy.factory.Factory
#Всплывающее окно Основ
<Bases@Popup>
auto_dismiss: True
title: 'Товары'
background_normal: ""
background_color: (26/255, 149/255, 184/255, .9)
ScrollView:
size: self.size
GridLayout:
size_hint_y: None
height: self.minimum_height
width: self.minimum_width
cols: 3
size: root.width * 0.5, root.height * 0.5
row_default_height: 35
row_force_default: True
center: root.width / 1, root.height / 1
Label:
text: ''
Label:
text: ''
Button:
text: 'Закрыть'
font_size: 12
on_release: root.dismiss()
Label:
text: 'Наименование'
font_size: 12
text_size: self.size
halign: 'left'
valign: 'middle'
Label:
text: 'Кол-во'
font_size: 12
text_size: self.size
halign: 'right'
valign: 'middle'
Label:
text: 'В корзину'
font_size: 12
Label:
text: f'Товар 1 290р'
font_size: 12
text_size: self.size
halign: 'left'
valign: 'middle'
AnchorLayout:
anchor_x: 'right'
TextInput:
id: name_input
multiline: 'False'
width: 60
size_hint_x: None
Button:
text: '+'
on_press:
app.add_item('Товар 1', '290', name_input.text)
Label:
text: f'Товар 2 250р'
font_size: 12
text_size: self.size
halign: 'left'
valign: 'middle'
AnchorLayout:
anchor_x: 'right'
TextInput:
id: name_input2
multiline: 'False'
width: 60
size_hint_x: None
Button:
text: '+'
on_press:
app.add_item('Товар 2', '250', name_input2.text)
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: 'Магазин'
MDBottomNavigation:
#Нижння часть эакрана "Главная"
MDBottomNavigationItem:
name: 'Items'
text: 'Главная'
icon: 'home'
MDBoxLayout:
orientation: 'vertical'
pos_hint: {'center_y':0.5}
adaptive_height: True
spacing: 2
MDRaisedButton:
text: 'Товар'
pos_hint: {"center_x":.5}
width: dp(250) + (self.ids.lbl_txt.texture_size[0] - self.ids.lbl_txt.texture_size[0])
on_release: Factory.Bases().open()
#Нижняя часть главного экрана "Корзина"
MDBottomNavigationItem:
name: 'Basket'
text: 'Корзина'
icon: 'basket'
ScrollView:
size: self.size
GridLayout:
size_hint_y: None
height: self.minimum_height
width: self.minimum_width
size: root.width * 0.5, root.height * 0.5
row_default_height: 35
row_force_default: True
center: root.width / 1, root.height / 1
id: basketItems
cols: 4
spacing: 4