2017-02-24 43 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的回答。)