Python kivy scrollview与boxlayout

Python kivy scrollview与boxlayout,python,kivy,Python,Kivy,我现在正在熟悉kivy。 我认为它有很大的潜力,但我确实发现“普通python”和kv语言之间的关系有点令人困惑,这使得我很难理解在哪里执行项目。目前,在我看来,在使用python vs kv-l时,行为(幕后发生的事情)不是一对一的,总的来说,我认为这使得可用性/生产率的标准相当高 我和其他人一起参加了《险恶》的“速成班”,这是给kivy留下第一印象的一个很好的开始。 无论如何,在学习的过程中,我只是想看看我是否可以使一个框视图可滚动-结果是我不能 需要什么才能使这段代码起作用,即将标签扩展到

我现在正在熟悉kivy。 我认为它有很大的潜力,但我确实发现“普通python”和kv语言之间的关系有点令人困惑,这使得我很难理解在哪里执行项目。目前,在我看来,在使用python vs kv-l时,行为(幕后发生的事情)不是一对一的,总的来说,我认为这使得可用性/生产率的标准相当高

我和其他人一起参加了《险恶》的“速成班”,这是给kivy留下第一印象的一个很好的开始。 无论如何,在学习的过程中,我只是想看看我是否可以使一个框视图可滚动-结果是我不能

需要什么才能使这段代码起作用,即将标签扩展到其“纹理大小”,同时拥有一个可调整的滚动视图

如果BoxLayout有一个size\u hint\u y:None,则标签不会扩展到文本,但是当窗口变小时,可以看到滚动视图的作用

如果BoxLayout有一个size\u hint\u y:1,则标签将展开,但BoxLayout的高度显然没有任何变化,即scrollview窗口似乎与size\u hint\u y:None相同

如果我只输入一个大的高度,scrollview会覆盖这个,但我希望可以获得boxlayout的动态高度,并将其与内容相结合

我已经尝试过高度、大小提示等,但我没有找到一种有效的组合,有时会收到警告,指出由于内部重画循环,代码需要重新生成

我缺少/不理解什么

代码如下所示

from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.scrollview import ScrollView

Builder.load_string("""

<ScrollableLabel>:
    BoxLayout:
        orientation: 'vertical'
        # size_hint_y: 1
        size_hint_y: None
        height: 400 #self.size[1]
        canvas:
            Color:
                rgba: (1, 0, 0, .5) # DarkOliveGreen
            Rectangle:
                size: self.size
                pos: self.pos
        Label:
            id: bust
            text: 'a string that is long ' * 10
            font_size: 50
            text_size: self.width, None
            size_hint_y: None
            height: self.texture_size[1]
            canvas:
                Color:
                    rgba: (0, 1, 0, .5) # DarkOliveGreen
                Rectangle:
                    size: self.size
                    pos: self.pos
        Label:
            text: '2 strings that are long ' * 10
            text_size: self.width, None
            size_hint_y: None
            height: self.texture_size[1]
        Button:
            text: 'just testing'



""")

class ScrollableLabel(ScrollView):
    pass

runTouchApp(ScrollableLabel())
从kivy.base导入runTouchApp
从kivy.lang导入生成器
从kivy.uix.scrollview导入scrollview
生成器。加载\u字符串(“”)
:
盒子布局:
方向:“垂直”
#尺寸提示:1
尺寸提示:无
身高:400#自身尺寸[1]
画布:
颜色:
rgba:(1,0,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
id:半身像
文本:“一个长字符串”*10
字体大小:50
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
画布:
颜色:
rgba:(0,1,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
文本:“2个长字符串”*10
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
按钮:
文字:“只是测试”
""")
类ScrollableLabel(ScrollView):
通过
runTouchApp(ScrollableLabel())

BoxLayout的设计目的是让其子项自行填充。对于动态调整大小,更好的布局是GridLayout,它有一个最小的\u高度,您可以绑定到该高度进行自动调整大小

<ScrollableLabel>:
    GridLayout:
        cols: 1
        size_hint_y: None
        height: self.minimum_height
        canvas:
            Color:
                rgba: (1, 0, 0, .5) # DarkOliveGreen
            Rectangle:
                size: self.size
                pos: self.pos
        Label:
            id: bust
            text: 'a string that is long ' * 10
            font_size: 50
            text_size: self.width, None
            size_hint_y: None
            height: self.texture_size[1]
            canvas:
                Color:
                    rgba: (0, 1, 0, .5) # DarkOliveGreen
                Rectangle:
                    size: self.size
                    pos: self.pos
        Label:
            text: '2 strings that are long ' * 10
            text_size: self.width, None
            size_hint_y: None
            height: self.texture_size[1]
        Button:
            text: 'just testing'
""")
:
网格布局:
科尔斯:1
尺寸提示:无
高度:自身最小高度
画布:
颜色:
rgba:(1,0,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
id:半身像
文本:“一个长字符串”*10
字体大小:50
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
画布:
颜色:
rgba:(0,1,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
文本:“2个长字符串”*10
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
按钮:
文字:“只是测试”
""")

谢谢,这一切都如期实现了,我自己是不会想到的。