[英]Kivy access gridlayout within scrollview dynamically in python
我正在尝试将标签/按钮添加到 Scrollview 中的 GridLayout,但不知何故我无法在 python 中访问 GridLayout。 考虑以下 .kv 部分
<DrvList>
ScrollView:
size_hint: (None, None)
size: 0.95, 0.95
GridLayout:
minimum_height: self.height
id: grid
size_hint_y: None
rows: 3
cols: 1
和简化的相应 Python 部分
class DrvList(ScrollView):
selection = StringProperty()
def __init__(self, *args, **kwargs):
super(DrvList, self).__init__(*args, **kwargs)
self._src = ["C", "D", "E"]
for x in self._src:
self.grid.add_widget(ToggleButton(id=x, text=x))
DrvList.selection = self._src[0]
我收到一个错误
AttributeError: 'DrvList' object has no attribute 'grid'
那么如何访问网格? 此外,关于制作这样一个“可拖放”的列表的任何建议,以便我可以在具有视觉反馈的列表中移动项目? 但目前最重要的是如何访问网格的问题。 self.ids.grid 也不起作用...
编辑:Kivy >= 1.11.x,所以不是 1.10 或更低
您的代码存在一些问题。 首先是在应用kv
规则时创建了ids
,我必须承认这些ids
何时真正可用似乎很难定义。 但是,通常当ids
不可用时,可以通过使用Clock.schedule_once()
来Clock.schedule_once()
这个问题:
class DrvList(ScrollView):
selection = StringProperty()
def __init__(self, *args, **kwargs):
super(DrvList, self).__init__(*args, **kwargs)
Clock.schedule_once(self.setup)
def setup(self, dt):
self._src = ["C", "D", "E"]
for x in self._src:
self.ids.grid.add_widget(ToggleButton(id=x, text=x))
self.selection = self._src[0] # Properties should be referenced using "self"
另外,请注意,在您的kv
,以下kv
行:
size_hint: (None, None)
size: 0.95, 0.95
正在将ScrollView
大小设置为小于 1 x 1 像素,因此它可能不可见。
另外一个值得注意的是,你的kv
,看跌期权的ScrollView
内DrvList
,但DrvList
是ScrollView
,所以你放置一个ScrollView
一内ScrollView
,当你尝试实际滚动可能造成困难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.