Kivy ScrollView滚动后回弹异常问题求助
解决Kivy中ScrollView嵌套GridLayout后滚动回弹的问题
你的代码存在几个关键问题导致ScrollView滚动后立即回弹,以下是具体修复方案:
问题分析与修复点
- 错误的size_hint参数格式:
MainWindow中给ScrollViewExample设置size_hint = ("0.3dp", None)是错误的,size_hint接受0到1之间的比例数值,不能带单位。应改为size_hint=(0.3, 1),让侧边栏占MainWindow宽度的30%,高度占满整行。 - ScrollView高度硬编码:
ScrollViewExample中硬编码height=10000会导致布局逻辑混乱,需去掉该设置,让ScrollView的高度由父容器通过size_hint控制。 - SideMenuStack高度未动态更新:
SideMenuStack初始化时还未添加按钮,此时self.minimum_height为0,设置height = self.minimum_height后,后续添加按钮也不会自动更新高度。需通过绑定minimum_height到自身height实现动态适配。
修改后的完整代码
from kivy.app import App from kivy.uix.button import Button from kivy.uix.gridlayout import GridLayout from kivy.uix.scrollview import ScrollView from kivy.uix.stacklayout import StackLayout class MainWindow(GridLayout): def __init__(self, **kwargs): super(MainWindow, self).__init__(**kwargs) self.cols = 2 self.rows = 1 self.layout1 = ScrollViewExample() # 修正size_hint参数为比例值 self.layout1.size_hint = (0.3, 1) self.add_widget(self.layout1) self.layout2 = MyGrid() # 调整比例避免布局宽度溢出 self.layout2.size_hint = (0.7, 1) self.add_widget(self.layout2) class SideMenuStack(StackLayout): def __init__(self, **kwargs): super(SideMenuStack, self).__init__(**kwargs) self.size_hint_y = None # 绑定minimum_height到height,动态适配内部控件高度 self.bind(minimum_height=self.setter('height')) for i in range(100): button = Button(text=str(i), size_hint=(None, None), size=("92dp", "92dp")) self.add_widget(button) class ScrollViewExample(ScrollView): def __init__(self, **kwargs): super(ScrollViewExample, self).__init__(**kwargs) # 移除硬编码高度,由父容器控制尺寸 self.size_hint = (1, 1) self.layout1 = SideMenuStack() self.do_scroll_y = True self.do_scroll_x = False self.add_widget(self.layout1) class MyGrid(GridLayout): pass class GuiApp(App): def build(self): return MainWindow() if __name__ == "__main__": GuiApp().run()
额外说明
- 调整
MyGrid的size_hint_x为0.7,确保两列布局宽度总和为1,避免出现挤压或溢出问题。 - 通过
self.bind(minimum_height=self.setter('height')),SideMenuStack的高度会随内部按钮的添加自动调整,确保ScrollView能正确计算可滚动区域,彻底解决回弹问题。
内容的提问来源于stack exchange,提问作者Alex Woodhead
相关产品推荐
相关产品推荐

