2017-02-24 38 views

回答

0

我不認爲record_new_model被調用。

你的構造函數失敗了,所以其餘的並不重要。

您沒有正確設置標識。

你需要做這樣的事情

<ModelAddLayout>: 

    model_add_name: model_add_name 

    orientation: 'vertical' 
    padding: 20, 20 

    Label: 
     id: title_label 
     text: 'Model Add Screen' 
     font_size: '30dp' 
     # text_size: '15dp' 

    TextInput: 
     id: model_add_name 
     text: 'Add your model name here' 
     multiline: False 

當你添加一個ID它不會添加到父一個孩子。您還需要將該ID添加到父級:model_add_name: model_add_name

+0

恐怕不是這樣。我已經成功地調用了過去沒有初始化id的子id。它與其他代碼一起工作的原因,而不是這個與根有關。根決定首先將哪些元素加載到代碼中。對於這個代碼是ScreenManagement。其他人的根是ModelAddLayout。因此,對於我鏈接的代碼,它會比我預期的更晚加載kv文件的元素,因此,不需要調用ids屬性中的任何鍵。 –

+0

我試過你的建議,順便說一句。我不只是把它擦掉。我所做的工作是將除super()之外的所有東西都放入一個新函數late_init(self,keys,** largs)中。之後,我在__init __()的超級後面放置了Clock.schedule_once(self.late_init,0)。這給了應用程序時間來填充ID,使我的下拉列表成爲現實。 –

+0

是的,有時候會發生。如果您想要添加小部件的確切時刻,您可以在控制器類中實現on_model_add_name。每當widget_id的值發生變化時,Kivy都會爲您調用名爲on_widget_id的方法。我認爲你需要將widget_id定義爲ObjectProperty才能工作。 –

0

根決定首先將哪些元素加載到代碼中。

對於此代碼是ScreenManagement。其他人的根是ModelAddLayout。

因此,對於我鏈接的代碼,它會比我預期的更晚加載kv文件的元素,因此在ids屬性中沒有鍵可調用。然後,我所做的工作就是將super()以外的所有東西放入新函數late_init(self,keys,** largs)中。

之後,我把Clock.schedule_once(self.late_init,0)init()的超級。

這給了應用程序時間來填充id,使我的下拉列表成爲現實。

(從評論到Radu Dita的回答。)