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
相关产品推荐
相关产品推荐

