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

除其他外,我还特别使用了“速成类”,这是对基维产生第一印象的一个很好的开始。
无论如何,在学习过程中,我只是想看看我是否可以使盒 View 可滚动-事实证明我做不到。

要使此代码正常工作,需要执行什么操作,即将标签扩展到其“纹理大小”,并同时具有可对其进行调整的ScrollView?

如果BoxLayout具有size_hint_y:无,则标签不会扩展为文本,但是当使窗口很小时,可以在实际中看到滚动 View 。

如果BoxLayout的size_hint_y:1,标签会被扩展,但显然boxlayout的高度不会改变,即滚动 View 窗口似乎与size_hint_y相同:无

如果我只是设置一个很大的高度,则滚动 View 将覆盖此范围,但是我希望有可能获得与它的内容相关的动态BoxLayout的高度。

我玩过高度,size_hints等,但没有找到一种可行的组合,有时会收到警告,由于内部重画循环需要重新编写代码?

我缺少/不了解什么?

代码如下。

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())

最佳答案

BoxLayout旨在使其子级填充自身。 GridLayout具有更好的布局,可用于动态调整大小,您可以将其设置为minimum_height以便自动调整大小。

<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'
""")

关于python - 带有boxlayout的kivy scrollview,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31367853/

10-12 20:56