我还不能评论,所以请原谅相关帖子。我和这个人有同样的问题: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)))
但实际输出是: {}
有没有办法让这项工作符合预期?相关地,是否值得找到这种方式/更好的做法是创建自己的参考字典呢?
答案 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