2014-01-29 5 views
0

다음 코드를 사용하여 내 앱의 텍스트 상자에 정보를 입력하면 offset_back이 목록과 self.main을 반환합니다. .kv 파일을 사용하여 스크롤보기를 만듭니다. 레이아웃을 추가하지만 데이터를 다시 입력하려고하면 "예외 발생 ('ScrollView는 하나의 위젯 만 허용')"Kivy ScrollView 예외 발생 예외 ('ScrollView는 하나의 위젯 만 허용')

자기를 재설정해야합니까? 주된 방법으로, 그렇다면 어떻게 이것을 할 수 있습니까? 감사합니다. .

def set_back_offset(self): 
    layout = GridLayout(cols=1, spacing=10, size_hint_y=None) 
    layout.bind(minimum_height=layout.setter('height')) 

    # catch empty box input which is a str, as Decimal will throw error. 
    if self.initial_bet.text == str() or self.initial_odds.text == str(): 
     pop_warning().open() 
    #make sure entered unicode text is numeric, if not throw pop-up warning 
    elif not unicode.isnumeric(self.initial_bet.text) or not unicode.isnumeric(self.initial_odds.text): 
      pop_warning().open() 

    else:# all is good, create widgets 
     for details in offset_back(Decimal(self.initial_bet.text), Decimal(self.initial_odds.text)): 
      btn = Button(text=str(details[0]), size_hint_y=None, height=40,background_color= (255,0,0,1)) 
      layout.add_widget(btn) 
     self.main.add_widget(layout) 

`

답변

1

내가있는 ScrollView는 self.main 가정? 문제는 아마도 주석에 쓰여있는 것과 똑같은 위젯 하나만 받아 들일 수 있고 다른 하나를 추가하려고하면 이미 아이가 있다는 것입니다.

간단한 수정은 먼저 self.main.remove_widget(self.main.children[0])과 같은 기존 위젯을 제거하는 것입니다. 그러나 비슷한 항목으로 바꾸려면 기존 위젯의 일부 속성을 변경하는 것이 좋습니다.

어느 쪽이든 해결책은 새로운 ScrollView 자식을 추가하기 전에 기존 ScrollView 자식을 제거하는 것입니다.

+0

덕분에, 나는 예외를 이해했다. 나는 아이를 제거하는 법을 몰랐다. 처음에는 모든 GUI를 사용하기 때문에 나에게 새로운 것이다. 아이를 제거하면 화면에 아무것도 반환되지 않습니다. self.main.add_widget (layout) 다음에 self.main.remove_widget (self.main.children [0])을 수행하고 있습니다. 나는 데이터를 보여주고 그 아이를 제거 할 것이라고 생각했는데, 나는 틀린가? –

+0

새 아이디를 추가하기 전에 아이를 삭제해야합니다. 나는 당신의 원래 묘사로 그것보다 일찍 충돌 할 것이라고 생각했을 것이다. 어느 쪽이든,이 일반적인 아이디어를 따라 문제를 해결하십시오. – inclement

+0

내 논리가 거꾸로 된 것을 보았습니다. self.main.remove_widget (self.main.children [0])을 메서드의 첫 번째 줄에 넣었지만 여전히 동일한 예외가 발생했습니다. 나는 당신이 제안한 선을 따라 일해 나갈 것이고 그것을 다시 고맙게 생각할 것입니다. 다시 감사드립니다. –