1) Удалите следующее, потому что это приведет к ошибке, ValueError: None is not allowed for BoxLayout.height
self.nodes.size = (1, None)
2) Установите минимальную высоту для раскладки коробки, чтобы было, что прокрутить.
layout.bind(minimum_height=layout.setter('height'))
Пример - Kivy, SQLite
main.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.properties import ObjectProperty
import sqlite3 as lite
class RootWidget(BoxLayout):
nodes = ObjectProperty(None)
def __init__(self, **kwargs):
super(RootWidget, self).__init__(**kwargs)
self.nodes.bind(minimum_height=self.nodes.setter('height'))
def a_but(self):
''' Retrieve from database'''
db = lite.connect('chinook.db')
cursor = db.cursor()
cursor.execute("SELECT FirstName FROM customers ORDER BY CustomerId ASC")
result = cursor.fetchall()
if result:
for row in result:
for col in row:
self.nodes.add_widget(Button(text=col, size_hint_y=None, height='200sp'))
class TestApp(App):
def build(self):
return RootWidget()
if __name__ == "__main__":
TestApp().run()
test.kv
#:kivy 1.10.0
<RootWidget>:
nodes: nodes
BoxLayout:
Button:
text: "A"
background_color: (1, 1, 1, 0.8)
on_release: root.a_but()
size_hint: 1, .5
BoxLayout:
orientation:'vertical'
size_hint: 1, 1
ScrollView:
id: scrlv
bar_width: 10
BoxLayout:
id: nodes
orientation: 'vertical'
size_hint: 1, None
выход