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

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

这是我的代码:

    sview=uix.scrollview.ScrollView(size_hint=[1,2],scroll_type=['bars','content'],valign='top',bar_width="10dp")
    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)

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

【问题讨论】:

    标签: python scrollview kivy


    【解决方案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) 以仅使用您分配的区域。
    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 2020-10-22
    相关资源
    最近更新 更多