我需要创建具有自定义行布局的项目列表。每行应有一个图像,一个主按钮和另外两个小按钮(并排),按下主按钮后,我想在该行下方的滚动视图中显示一个短文本。 我使用的自定义BoxLayout如下所示:
<InfoRow@BoxLayout>:
landmarkName: self.landmarkName
pozaId: self.pozaId
rowId: self.rowId
starId: self.starId
svId: self.svId
show_infoId: self.show_infoId
orientation: 'vertical'
size_hint_y: None
height:self.minimum_height
BoxLayout:
size_hint_y: None
height: 50
pos_hint: {"x": 0, 'top': 1}
AsyncImage:
size_hint_x: 0.2
id: root.pozaId
source: root.srcImg
ToggleButton:
id: root.rowId
font_size: self.height * 0.5
text_size: self.size
text: root.landmarkName
on_release: root.toggle_info()
ToggleButton:
#on_release: self.parent.parent.ids.calc_input.text += self.text
size_hint: None, None
width: 50
height: 50
background_down: 'data/check.png'
background_normal: 'data/full_plus.png'
ToggleButton:
id: root.starId
size_hint: None, None
height: 50
width: 50
background_down: root.starImg
background_normal: root.starImg
on_release: root.saveLocation()
ScrollView:
id: root.svId
size_hint_y: None
pos_hint: {"x": 0.12, 'top': 1}
height: 0
InfoTextInput:
id: root.show_infoId
text: ""
size_hint_y: None
height: self.minimum_height
还有我的python代码:
class InfoRow(BoxLayout):
pozaId = StringProperty(' ')
rowId = StringProperty(' ')
starId = StringProperty(' ')
svId= StringProperty(' ')
show_infoId=StringProperty(' ')
landmarkName = StringProperty(' ')
pressed = False
starImg = StringProperty('data/white.png')
srcImg = StringProperty('data/white.png')
def __init__(self, **kwargs):
super(InfoRow, self).__init__(**kwargs)
def toggle_info(self):
self.pressed = not self.pressed
if self.pressed:
height = self.height * .25
else:
height = 0
Animation(height=height, d=.25, t='out_quart').start(
self.ids[self.svId])
if not self.pressed:
self.ids[self.show_infoId].focus = False
return
self.ids[self.show_infoId].text = "TO DO"
self.ids[self.svId].scroll_y = 1
def saveLocation(self):
pass
我在哪里创建列表:
MainScreen(Screen)类:
def getSpecificInfo(self, category):
...
self.ids["extraInfo"].clear_widgets()
for i in range (0, 15):
wid = InfoRow(pozaId = pozaId, landmarkName=landmarkName, starImg = starImg ,rowId = rowId, starId = starId, svId= svId, show_infoId=show_infoId)
self.ids["extraInfo"].add_widget(wid)
目前,我设法动态创建了我的列表,但是在按下按钮后,ScrollView不显示,并且出现以下错误:
self.ids[self.svId])
KeyError: 'sv0'
我不知道我在做什么错。 有什么想法吗?
答案 0 :(得分:0)
self.ids[self.svId])
KeyError: 'sv0'
这意味着 'sv0'
字典类型属性中不存在self.svId
中的self.ids
值。
使用Python代码动态创建的小部件,分配给该小部件的id
未添加到self.ids
中。您可能想要创建自己的字典来存储它们,以便以后使用。