类似的帖子实际上无法帮助我。因此发布我自己的场景。我在其他布局中有一个网格布局区域。现在,该网格的行数是动态的。这是一个数据表。每次用户按下“添加”按钮时,都需要添加新行。并且当列表增长到大于布局大小时,滚动条应出现。
我在以下代码中复制了核心部分。我尝试使用回收视图,但无法成功。因此,现在我要尝试的算法是-
当按下添加按钮时,将调用python函数,该函数将收集接下来4个单元格的数据,并在网格布局中再添加4个按钮。
当网格行达到“ x”值上方时,将显示滚动条。
import os
os.environ['KIVY_GL_BACKEND'] = 'gl'
import kivy
kivy.require('1.11.0')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.properties import NumericProperty
class DataTable(BoxLayout):
pass
class MyTableApp(App):
rowNumber = NumericProperty(2)
def build(self):
return DataTable()
def add_a_row(self):
self.rowNumber += 1
if __name__ == '__main__':
MyTableApp().run()
<DataTable>:
orientation : 'vertical'
Button:
text : ""
#----------------------------------
BoxLayout:
orientation : 'horizontal'
Button:
text : ""
#----------------------------------
BoxLayout:
orientation : 'vertical'
GridLayout:
cols : 4
size_hint: 1.0, app.rowNumber*0.15
Button:
text: "name"
size_hint: 1, app.rowNumber
Button:
text: "type"
size_hint: 1, app.rowNumber
Button:
text: "content"
size_hint: 1, app.rowNumber
Button:
text: "xyz"
size_hint: 1, app.rowNumber
Button:
text: "name"
size_hint: 1, app.rowNumber
Button:
text: "type"
size_hint: 1, app.rowNumber
Button:
text: "content"
size_hint: 1, app.rowNumber
Button:
text: "xyz"
size_hint: 1, app.rowNumber
Label:
size_hint: 1.0, (1.0 - (app.rowNumber-1)*0.15)
#----------------------------------
Button:
text : ""
#----------------------------------
Button:
text: "Add"
on_release:
app.add_a_row()
或者,如果有更好的方法来实现我的期望,请提出建议。谢谢您的提前支持。
答案 0 :(得分:0)
我仍在努力阐明这一点。我找不到像添加尚未在初始设计文件中声明的新小部件之类的东西。我有一种感觉,kivy没有这样的选择。
只有可行的解决方案才能使RecycleView正常工作。
答案 1 :(得分:0)
以下解决方案使用ScrollView和GridLayout解决问题。
BoxLayout
替换为ScrollView
以支持滚动id: container
添加到实例化对象GirdLayout:
GridLayout
的高度足以滚动<Row>:
orientation: "horizontal"
Button:
text: "name"
Button:
text: "type"
Button:
text: "content"
Button:
text: "xyz"
...
<DataTable>:
ScrollView:
GridLayout:
id: container
cols: 1
size_hint_y: None
height: self.minimum_height
row_force_default: True
row_default_height: dp(26)
class Row(BoxLayout):
pass
...
class TestApp(App):
...
def add_a_row(self):
self.root.ids.container.add_widget(Row())