为什么这不会加载BoxLayout中内容的ID? (Kivy)

时间:2017-02-24 10:05:46

标签: python kivy

为什么这段代码从第21行获得KeyError?

我尝试过类似代码的不同版本,但这是获取KeyError的唯一文件。

要点:https://gist.github.com/Crowbrammer/464ae3ae3ddd7d33a9eb64d856acacd0

为什么它缺少Kivy文件中每个元素的id?

为什么 init ()函数下面的函数可以使用完全相同的代码行 - 但是init()函数没有?

2 个答案:

答案 0 :(得分:0)

我认为record_new_model不会被调用。

你的构造函数失败了,其余的并不重要。

您没有正确设置ID。

你需要做这样的事情

<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

答案 1 :(得分:0)

root确定首先将哪些元素加载到代码中。

此代码是ScreenManagement。其他人的根是ModelAddLayout。

因此,对于我链接的代码,它会比我预期的更晚加载kv文件的元素,因此ids属性中没有要调用的键。

然后,我开始工作的是将除super()之外的所有内容放入一个新函数late_init(self,keys,** largs)。

之后,我将Clock.schedule_once(self.late_init,0)放在 init ()超级之后。

这使应用程序有时间填充ID,使我的下拉列表成为现实。

(从评论到Radu Dita的答案。)