2016-07-20 2 views
0

위젯을 추가 할 때와 똑같은 작업을 시도하고 있지만 성공하지는 못했습니다. kv 언어 및 바인드 기능을 사용하고 있습니다. 아래 코드를 사용하면 버튼을 동적으로 추가 할 수 있지만 제거 할 수는 없습니다.kivy에서 위젯을 제거하려면 어떻게해야합니까?

class PrimeiroScreen(Screen): 
    def __init__(self, **kwargs): 
     self.name = 'um' 
     super(Screen,self).__init__(**kwargs) 


    def fc2(self): 
     btn = Button(text="Botão",size_hint=(.1,.1)) 
     self.ids.grade2.add_widget(btn)  
     btn.bind(on_press=self.printa) 

    def printa(self,*args): 
     #btn2 = Button(text="Btn2",size_hint=(.1,.1))#I can add another btn succesfully 
     self.ids.grade2.add_widget(btn2)#but I can do the same by this way 
     self.remove_widget(btn) 
     grade2.remove_widget(self.btn) 

<RootScreen>: 
    PrimeiroScreen: 

<PrimeiroScreen>: 
    GridLayout: 
     cols: 1 
     size_hint: (.5,1) 
     id: grade 
     Button: 
      text: "hi!" 
      on_press: root.fc2() 

    StackLayout: 
     orientation: 'bt-rl' 
     GridLayout: 
      cols: 2 
      size_hint: (.5,1) 
      id: grade2 

이 사람에게 내가 만든 실수의 어떤 생각을 가지고 .kv?

self.remove_widget(btn) 
NameError: global name 'btn' is not defined 
+0

'widget_to_remove.parent.remove_widget (widget_to_remove)처럼 제거' –

답변

2

변경 그래서 당신이 그것을 클래스 속성을 만들
btn = Button(text="Botão",size_hint=(.1,.1))
self.btn = Button(text="Botão",size_hint=(.1,.1))

에 : 파이썬은 아래의 메시지 나에게 보여줍니다. 다음

그리고이
self.remove_widget(self.btn)

+0

나는 그것을 잘하지 않았다 여기에 썼다,하지만 난 내 코드를 리메이크하고 내가 전화하지 않았다 보았다 all "btn = self.btn". 이렇게하면 "self.btn.bind (on_press = self.fc)"및 "self.ids.grade2.add_widget (self.btn)"을 수행했습니다. 정말 고마워. 그리고 내 방치에 대해 유감이다. 괜찮 았어. – victorcd

+0

다른 게시물을 만들지 않으려면. 다른 클래스의 위젯을 추가하거나 제거하려면 어떻게해야합니까? 나는 정상적인 함수와 같은 방식으로 노력하고 있는데, 왜냐하면 변경 텍스트 레이블과 같은 함수에 있기 때문이다. 그것은 같은 방식입니까? – victorcd

+0

@victorcd 질문에 맞지 않는 답변을 피하십시오. 당신은 당신이 원하는 것을 예제로 질문을 업데이트하거나 새로운 질문을 만듭니다 :) – EL3PHANTEN

관련 문제