Kivy:以编程方式创建小部件ID

时间:2016-02-06 19:04:43

标签: python kivy

我还不能评论,所以请原谅相关帖子。我和这个人有同样的问题:Empty list of ids in a Kivy GridLayout

虽然我已经找到了一个解决方法,因为回答者建议,通过在创建网格对象时存储对网格对象的引用,我想知道是否有一种方法可以通过编程方式将id分配给稍后可以通过其访问的小部件父母的“ids”字典。

例如,在原始问题中,代码添加了如下小部件:

<div class="interests">
    <h1 class="sub-header">Interests:</h1>

    <div class="interest">
      <div class="interest-info">
        <input class="interest-checkbox" type="checkbox" />
        <label class="interest-label">SKATE</label>
      </div>
    </div>

    <div class="interest">
      <div class="interest-info">
        <input class="interest-checkbox" type="checkbox" />
        <label class="interest-label">SNOW</label>
      </div>
    </div>

    <div class="interest">
      <div class="interest-info">
        <input class="interest-checkbox" type="checkbox" />
        <label class="interest-label">WOMEN</label>
      </div>
    </div>

    <div class="interest">
      <div class="interest-info">
        <input class="interest-checkbox" type="checkbox" />
        <label class="interest-label">SURF</label>
      </div>
    </div>

    <div class="interest">
      <div class="interest-info">
        <input class="interest-checkbox" type="checkbox" />
        <label class="interest-label">MUSIC/ART</label>
      </div>
    </div>

</div>

但是如果你在kv文件中分配它,那么这里使用的id属性明显不同于id属性。

所以预期的输出是ids dict看起来像:

for i in range(81):
    row = i // 9
    col = i  % 9
    grid.add_widget(TextInput(id = str(row) + "-" + str(col)))

但实际输出是:      {}

有没有办法让这项工作符合预期?相关地,是否值得找到这种方式/更好的做法是创建自己的参考字典呢?

1 个答案:

答案 0 :(得分:1)

使用内置的children列表,该列表会自动填充每个添加的小部件:

class MyButton(Button):

    x = NumericProperty(-1)
    y = NumericProperty(-1)


class MyGrid(GridLayout):

    cols = NumericProperty(1)

    def add_buttons(self):
        for i in xrange(10):
            button = MyButton(x=i, y=i)
            self.add_widget(button)

    def print_children(self):
        for child in self.children:
            print 'button coords:', child.x, child.y