ScrollView 中的 Kivy StackLayout

Posted

技术标签:

【中文标题】ScrollView 中的 Kivy StackLayout【英文标题】:Kivy StackLayout in ScrollView 【发布时间】:2017-09-18 16:28:24 【问题描述】:

我只是不能让它滚动....

这是我的代码:

    sview=uix.scrollview.ScrollView(size_hint=[1,2],scroll_type=['bars','content'],valign='top',bar_)
    bl=uix.stacklayout.StackLayout(size_hint_y=None)
    for x in list:
        bl.add_widget(uix.button.Button(text=x['text'])

    sview.add_widget(bl)

它有点复杂,但这就是它的要点

【问题讨论】:

【参考方案1】:

这是一个滚动视图的工作示例。来自文档:ScrollView 我对其进行了编辑以使用 stacklayout。

尝试在 ScrollView 中更改 size_hint,如下所示:size_hint=(1, None)

同时设置 ScrollView 的大小,使其具有窗口高度:size=(Window.width, Window.height)

和示例一样,绑定布局的最小高度。在您的情况下添加bl.bind(minimum_height=bl.setter('height'))

最后将按钮的 size_hint 设置为 None:size_hint_y=None

from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
from kivy.app import runTouchApp

layout = StackLayout(size_hint_y=None)
# Make sure the height is such that there is something to scroll.
layout.bind(minimum_height=layout.setter('height'))
for i in range(100):
    btn = Button(text=str(i), size_hint_y=None, height=40)
    layout.add_widget(btn)
root = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
root.add_widget(layout)

runTouchApp(root)

如果您想更改窗口大小,请尝试使用 kv lang。这样它会自动绑定到 Windows 大小。 像这样:

from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.app import App


KV = '''

#: import Window kivy.core.window.Window

ScrollView:
    size_hint: (1,None)
    size: (Window.width, Window.height)
    MyLayout:

'''


class MyLayout(StackLayout):

    def __init__(self,**kwargs):
        super(MyLayout,self).__init__(**kwargs)
        self.size_hint_y=(None)
        self.bind(minimum_height=self.setter('height'))
        for i in range(100):
            btn = Button(text=str(i), size_hint_y=None, height=40)
            self.add_widget(btn)


class MyApp(App):

    def build(self):    
        return Builder.load_string(KV)


MyApp().run()

【讨论】:

谢谢,这似乎可行,但是一旦我导入 Window,我更改默认窗口大小的方法就不起作用了。如何更改窗口大小? 知道了,但这似乎只适用于默认窗口大小(并且我的 ScrollView 无法覆盖整个窗口)。一旦我更改了每个 Window.size 的大小,它就不再工作了? @Bohr 你很高兴 如果ScrollView 在另一个小部件中,您可以将size: (Window.width, Window.height) 替换为size: (self.parent.width, self.parent.height) 以仅使用您分配的区域。

以上是关于ScrollView 中的 Kivy StackLayout的主要内容,如果未能解决你的问题,请参考以下文章

在kivy中将文本与ScrollView中的标签边缘对齐

Kivy ScrollView 用于文本段落

Kivy:为啥 ScrollView 不能在 GridLayout 中工作?

如何在 Python/Kivy 中实现 ScrollView

没有为kivy获取ScrollView

Kivy:将 ScrollView 移动到某个 y