2016-06-26 6 views
0

У меня возникли проблемы удаления виджета с помощью remove_widget в kivy я либо получить TypeError: «Метка» объект не имеет атрибута «GetItem» ошибка или он просто не удаляет который был создан.remove_widget в kivy не удаляет виджет

Я думаю, что я не правильно ссылаясь на виджет сделал, но не знаю, как ...

Builder.load_string(""" 


<MenuScreen>: 
    FloatLayout: 
     #cols: 2 
     #rows: 2 
     size: 800,480 

     Button: 
      id: resetmash 
      text: "Reset" 
      font_size: 30 
      size_hint: None, None 
      background_color: 1,0.88,0.882,1 
      size: 100,100 
      pos: 1450,800 
      on_press: root.resetmash() 
     Button: 
      id: btn_0 
      text: "+" 
      size_hint: None, None 
      size: 100,100 
      pos: 550,700 
      on_press: root.listmashsteps() 


""") 


class MenuScreen(Screen): 



    def resetmash(self): 
     self.remove_widget(Label()) 

    def listmashsteps(self, *largs): 
     self.add_widget(Label(text="Step")) 


    def __init__(self, **kwargs): 
     super(MenuScreen, self).__init__(**kwargs) 



sm = ScreenManager() 
menu_screen = MenuScreen(name='menu') 
sm.add_widget(menu_screen) 

class TestApp(App): 

    def build(self): 
     return sm 


if __name__ == '__main__': 
    TestApp().run() 
+0

Не уверен, что вы пытаетесь достичь здесь. – jligeza

+0

Когда я нажимаю кнопку, он создает ярлык, затем я хочу щелкнуть еще один botton, чтобы удалить ярлык. – fastmhc

+0

Затем создайте макет окна (или сетки) для этих меток, поэтому, когда вы хотите удалить ярлыки, просто вызовите 'remove_children() 'на этом поле. – jligeza

ответ

1
self.remove_widget(Label()) 

Это не имеет смысла - вы просто экземпляр, что этикетки, так что ISN 't уже добавлен в виджет, поэтому вы не можете его удалить.

Вместо хранить ссылку на этикетке, когда вы добавляете его, что-то вроде:

self.label = Label(text='Step') 
self.add_widget(self.label) 

Тогда позже:

self.remove_widget(self.label) 
+0

просто для наблюдения. если я делаю несколько виджетов ярлыков в цикле, например def listmashsteps (self, * larges): для шага в диапазоне (0,4): self.label = Ярлык (текст = «Шаг» + шаг) .remove_widget (self.label) удаляет только созданную последнюю метку. Есть ли способ удалить все метки, которые были созданы ранее. Кажется, что созданные ярлыки не индексируются, поэтому я не могу self.remove_widget (self.label [0]) – fastmhc

+0

Посмотрите, что на самом деле делает код - он устанавливает 'self.label', чтобы указать на экземпляр' Label' которые вы создали. Если вы хотите хранить ссылки на несколько ярлыков, вы должны соответствующим образом изменить код, например. 'self.labels = []' и 'self.labels.append (Label (text = '...'))', тогда вы можете изменить метки в self.labels позже. – inclement

+0

Еще раз спасибо за ответ. Я получаю ошибку 'AttributeError: 'list' объект не имеет атрибута 'bind'' after – fastmhc

Смежные вопросы