Ошибка при попытке удалить виджет в KivyMD

Я пытаюсь написать простейшее приложение на python и kivymd, но столкнулся с ошибкой.

line 172, in clears
self.General.ids.BL.remove_widget(self.test)
AttributeError: 'Game' object has no attribute 'test'

Ниже я постараюсь написать только основной код, для этого уберу ненужные детали, чтобы они не мешали восприятию.

Проблема -> Виджет не может быть удален. После появления MDIconButton из кода Python их нужно через некоторое время удалить. Я думаю, что к элементам MDIconButton из кода вам нужно будет добавить идентификатор с помощью идентификаторов, но пока невозможно удалить даже виджет из разметки KV, у которого уже есть идентификатор. Я попытался удалить виджет с помощью

self.General.ids.BL.remove_widget(self.test)

Но это дает ошибку, которая была выше.

В идеале я хотел бы выяснить, как удалить виджеты из кода python, но я был бы благодарен за любую помощь. При необходимости я готов показать весь код целиком.

from kivy.lang import Builder 
from kivymd.app import MDApp 
from kivy.animation import Animation
from kivymd.uix import screen
from kivymd.uix.screen import MDScreen
from kivymd.uix.button import MDIconButton
from kivymd.uix.label import MDIcon, MDLabel

from kivy.uix.widget import Widget

import random
import os

KV = '''
ScreenManager:

    Screen:
        FitImage:
            source: 'path'




        MDIconButton:
            icon: 'path'
            pos_hint: {"center_x": .5, "center_y": .70}
            user_font_size: '35dp'
            on_release:app.start()

    
    Screen:
        name: 'start_game'
        FitImage:
            source: 'path'

        FloatLayout:
            id : BL
            orientation: 'vertical'

            MDIconButton:
                id:test
                icon: 'path'
                pos_hint: {"center_x": .30, "center_y": .15}
                user_font_size: '35dp'
                on_release:app.Games("one")

            MDIconButton:
                id:two
                icon: 'path'
                pos_hint: {"center_x": .45, "center_y": .2}
                user_font_size: '35dp'
                on_release:app.Games("two")

            MDIconButton:
                id:three
                icon: 'path'
                pos_hint: {"center_x": .60, "center_y": .15}
                user_font_size: '35dp'
                on_release:app.Games("three")

        





'''

        #self.General.ids.BL.remove_widget(self.test)
    

class Game(MDApp):
    def build(self):
        self.General = Builder.load_string(KV)
        return self.General

        
    
    def hod_igrok(self, igrok, mix, miy,status=None):
        status = '0'
        if status == 'long':
            igrok = igrok[0].replace(' ','')
        else:
            pass
        print(igrok)

        self.General.ids.BL.add_widget(
            MDIconButton(
                pos_hint={"center_x": mix, "center_y": miy},
                icon=r"path %s.png"%igrok,
                user_font_size= '50dp'

                
            )
        )

  
        return self.General




    def hod_comp(self, comp, c_x, c_y, status=None):

        print(comp)
        status = ' '
        if status == 'long':
            comp = comp[0].replace(' ','')
        else:
            pass


        self.General.ids.BL.add_widget(
            MDIconButton(
                pos_hint={"center_x": c_x, "center_y":c_y},
                icon= r"path c_%s.png"%comp,
                user_font_size='50dp'
                )
            )
       
        return self.General





    def clears(self):
        self.General.ids.BL.remove_widget(self.test)


        
    def Games(self, igrok):
        
        lis = ['kamen','nojnicy', 'bumaga']
        comp= random.choice(lis)



        if comp == "kamen" and igrok == "kamen" or comp == "nojnicy" and igrok == "nojnicy" or comp == "bumaga" and igrok == "bumaga":
            print(comp,'/n',igrok)
            print("Ничья")
            self.hod_igrok(igrok, .45,.50, 'long')
            self.clears()


        elif comp == "kamen" and igrok == "bumaga" or comp == "nojnicy" and igrok == "bumaga" or comp == "bumaga" and igrok == "kamen":
            print(comp,'/n',igrok)
            print("Победил компьютор")
        elif igrok == "bumaga" and comp == "kamen" or igrok == "nojnicy" and comp == "bumaga" or igrok == "kamen" and comp == "nojnicy":
            print(comp,'/n',igrok)
            print("Выиграл игрок")




    def start(self):
        self.root.current= 'start_game'



Game().run()

Ответы (1 шт):

Автор решения: gil9red

Вместо self.test попробуйте self.General.ids.test

Пример:

self.General.ids.BL.remove_widget(self.General.ids.test)
→ Ссылка