You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy新手开发求助:ScrollView无法滚动,附相关实现代码

问题解决方法

Kivy的ScrollView可滚动的前提是内部子控件的总高度大于ScrollView自身的高度,你当前代码未给子布局配置高度自适应规则,导致子布局和ScrollView高度一致,因此无法触发滚动。

你需要修改三处代码:

  • 初始化subgrid时关闭垂直方向的尺寸自适应
  • 绑定subgrid的高度属性到自身最小高度,让它随内部控件数量自动扩展
  • 给每个列表Label设置固定高度,保证布局高度计算准确

修改后的完整代码如下:

class SearchMovie(GridLayout):
    global MovieList
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.cols = 1
        
        scrolly = ScrollView(size_hint=(1, None), size=(Window.width, Window.height*.9))
        # 新增size_hint_y=None关闭垂直自适应
        subgrid = GridLayout(cols=1, spacing=20, size_hint_y=None)
        # 新增绑定:subgrid高度随内部内容最小高度自动更新
        subgrid.bind(minimum_height=subgrid.setter('height'))
        movlist = MovieList[0]["Box1"]
        nmovlist = []
        for i in movlist:
            nmovlist.append(i)
        nmovlist.sort()
        for i in nmovlist:
            # 给Label设置固定高度,参与subgrid最小高度计算
            movlab = Label(text=i, size_hint_y=None, height=40)
            subgrid.add_widget(movlab)
        scrolly.add_widget(subgrid)
        self.add_widget(scrolly)
        
        self.goback = Button(text="Go Back", background_color =[0, 0, 1, 1], pos_hint={'bottom':1, 'center_x':1})
        self.goback.bind(on_press=self.go_back)
        self.add_widget(self.goback)
        
    def go_back(self, instance):
        MovieScript.screen_manager.current = "Main Page" 

如果修改后仍存在问题,可以检查Window.height*.9的计算是否符合你预期的ScrollView显示高度,避免ScrollView高度被设置为0导致显示异常。

内容的提问来源于stack exchange,提问作者Eager_n3wbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:36:02