如何将多个小部件同时添加到滚动视图?
Posted
技术标签:
【中文标题】如何将多个小部件同时添加到滚动视图?【英文标题】:How to add multiple widget at the same time to a scrollview? 【发布时间】:2020-07-27 17:34:31 【问题描述】:我是 kivy 的新手,所以我正在开发一个测试应用程序。我想用 ScrollView 创建一个屏幕,我想在 ScrollView 中的“行”中添加多个内容、文本(描述)和图像。 我试过这种方式:
class PresentUploadedData(Screen):
container = ObjectProperty(None)
def __init__(self, **kwargs):
super(PresentUploadedData, self).__init__(**kwargs)
Clock.schedule_once(self.setup_scrollview, 1)
def setup_scrollview(self, dt):
self.container.bind(minimum_height=self.container.setter('height'))
self.add_text_inputs()
def add_text_inputs(self):
for x in range(30):
self.container.add_widget(Label(text="Label ".format(x), size_hint_y=None, height=40, color= [128,0,0,1]))
self.container.add_widget(Image(source='test.jpg', size_hint=(None, None,), width=50, height=50))
使用这个.kv
文件:
<PresentUploadedData>:
name: "presentupload"
message: send
container: container
canvas:
Color:
rgba: 1,1,1,1
Rectangle:
size: self.size
pos: self.pos
GridLayout:
rows: 3
cols: 1
spacing: 5
padding: 5
font_name: "Calibri"
background_color: 1,1,1, 1
ScrollView:
background_color: 1,1,1, 1
size_hint: (1, .9)
bar_width: 10
bar_color: 128,0,0,0.7
bar_inactive_color: 128,0,0,1
effect_cls: "ScrollEffect"
scroll_type: ['bars', 'content']
color: 128,0,0,1
StackLayout:
id: container
size_hint_y: None
color: 128,0,0,1
GridLayout:
cols: 2
BoxLayout:
spacing: 5
size_hint: .7, .1
Button:
text: "< BACK"
id: send
color: 0, 0, 0, 1
background_color: .88,.88,.88, 1
size_hint: .2, 1
on_release:
app.root.current = "main"
root.manager.transition.direction = "right"
但我有 ScrollView accept only one widget
异常。
为什么我得到了这个,我该如何解决这个问题?
【问题讨论】:
是的,ScrollView
只接受一个孩子,所以让那个孩子成为Layout
Widget
并在Layout
中添加任何你想要的东西。
@JohnAnderson 谢谢你的想法,我按照你说的尝试了:layout = BoxLayout(orientation='vertical') layout.add_widget(Image(source='test.jpg', size_hint=(None, None,), width=50, height=50)) layout.add_widget(Label(text="Label ".format(x), size_hint_y=None, height=50, color= [128,0,0,1])) self.container.add_widget(layout)
但这让我在self.y+self.height/2
上得到了OverflowError
,我什至没有在我的代码中......
也收到了Clock.max_iteration attribute
错误
请发minimal reproducible example。
【参考方案1】:
.kv
file 中有错误:
GridLayout:
cols: 2
这是没用的。
可以在for
循环中再添加一个for
来解决问题:
row = [Label(text="Label ".format(x), size_hint_y=None, height=50, color= [128,0,0,1]), Image(source='test.jpg', size_hint=(None, None,), width=50, height=50)]
for r in row:
self.container.add_widget(r)
但这也没有把东西放在一起,只是让它们在那里。
【讨论】:
以上是关于如何将多个小部件同时添加到滚动视图?的主要内容,如果未能解决你的问题,请参考以下文章