Используйте self.ids.contents.remove_widget(instance)
, чтобы удалить экземпляр объекта.Пожалуйста, обратитесь к объяснениям и примеру для получения подробной информации.
файл kv
- Заменить динамический класс,
<Temp@BoxLayout>
на правило класса, <Temp>:
- Удалить
id: tmp
потому что это не нужно - Замените
root.remove_content(id)
на app.root.remove_content(root)
, потому что мы перемещаем метод в класс ScreenApp (), поскольку у нас уже есть метод add_content()
. - Вместо передачи
id
в качестве аргумента мы передаем root
, т. Е. Экземпляр Temp
объекта, подлежащего удалению. - Замените
text: 'Temp'
на root.text
для визуализации. - Удалено первое
BoxLayout:
в соответствии с правилом класса, <ScreenApp>:
, потому что это уже BoxLayout и на самом деле не нужен еще один BoxLayout, встроенный в BoxLayouts.
Код Python
- Добавлено
text
в качестве аргумента метода конструктора класса Temp()
. - Добавлено
self.text = text
для назначения - Добавлено
text='Temp' + str(self.idsum)
при создании экземпляра Temp
object
Пример
main.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class Temp(BoxLayout):
def __init__(self, iid, text, **kwargs):
super(Temp, self).__init__(**kwargs)
self.id = str(iid)
self.text = text
class ScreenApp(BoxLayout):
def __init__(self):
BoxLayout.__init__(self)
self.idsum = 0
self.idsum += 1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
self.idsum += 1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
def add_content(self):
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
def remove_content(self, instance):
self.ids.contents.remove_widget(instance)
class MainApp(App):
def build(self):
return ScreenApp()
if __name__ == "__main__":
MainApp().run()
main.kv
#:kivy 1.11.0
<Temp>:
text: 'Temp'
Button:
id: idti
text: "-"
on_press: app.root.remove_content(root)
Label:
id: idlbl
text: root.text
<ScreenApp>:
orientation: "vertical"
BoxLayout:
id: contents
orientation: "vertical"
Button:
text: "+"
on_press: root.add_content()
Выход