2014-01-29 159 views
0

使用下面的代碼,在我將信息輸入到應用程序的文本框後,offset_back返回一個list和self.main,我的id .kv文件創建一個滾動視圖 添加了佈局,但當我嘗試重新輸入數據第二次發生這種情況:「raise Exception('ScrollView accept only one widget')」Kivy ScrollView exception raise Exception('ScrollView accept only one widget')

我需要重置自我。主要以某種方式,如果是的話,我怎麼能做到這一點? 謝謝。

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

我假設了滾動是self.main?這個問題大概是它在錫上說的,它只接受一個小部件,當你嘗試添加另一個小部件時,它已經有一個小孩。

一個簡單的解決方法是首先刪除現有的部件,如self.main.remove_widget(self.main.children[0])。但是,如果您想用類似的東西替換它們,您可能更好地更改現有小部件的某些屬性。

無論哪種方式,解決方案是刪除現有的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])放在方法的第一行,但我仍然得到相同的異常。我會繼續按照你所建議的方式工作,並將解決它,再次感謝。 –