Python Kivy应用中ScrollView无法滚动的问题求助
解决Kivy ScrollView无法滚动的问题
你的ScrollView失效的核心原因是:作为ScrollView子控件的main_layout(BoxLayout)默认size_hint_y=1,它的高度会被限制在ScrollView的可视范围内,不会随内容扩展。要修复这个问题,只需给main_layout设置size_hint_y=None,并绑定它的minimum_height到自身高度,让它的高度随内部内容自动调整。
修改后的完整代码:
from kivy.app import App from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.textinput import TextInput from kivy.uix.gridlayout import GridLayout from kivy.uix.scrollview import ScrollView class Program(App): def build(self): # 给main_layout设置size_hint_y=None,并绑定minimum_height self.main_layout = BoxLayout(orientation="vertical", size_hint_y=None) self.main_layout.bind(minimum_height=self.main_layout.setter("height")) self.firstrow = BoxLayout(size_hint_y=None, height=44) self.secondrow = BoxLayout(size_hint_y=None, height=44) self.grid_izgara = GridLayout(cols=5, spacing=10, padding=10, size_hint_y=None) self.grid_izgara.bind(minimum_height=self.grid_izgara.setter("height")) self.scroll_view = ScrollView(size_hint=(None, None), size=(700, 900)) self.eqn = Label(text="Equation") self.equation = TextInput(size_hint_y=None, height=44) self.buton = Button(text="Drop Down Menu", size_hint_y=None, height=44) self.lowerBound = Label(text="Lower Bound", size_hint_y=None, height=44) self.lowerB = TextInput(size_hint_y=None, height=44) # 设置固定高度,避免布局混乱 self.upperBound = Label(text="Upper Bound", size_hint_y=None, height=44) self.upperB = TextInput(size_hint_y=None, height=44) self.maxIteration = Label(text="Max Iteration", size_hint_y=None, height=44) self.maxI = TextInput(size_hint_y=None, height=44) self.tolerance = Label(text="Toleration", size_hint_y=None, height=44) self.toler = TextInput(size_hint_y=None, height=44) self.solveButon = Button(text="Solve It", size_hint_y=None, height=44) # 添加更多按钮测试滚动效果 for i in range(50): self.grid_izgara.add_widget(Button(text=f"按钮{i+1}", size_hint_y=None, height=44)) self.firstrow.add_widget(self.eqn) self.firstrow.add_widget(self.equation) self.secondrow.add_widget(self.solveButon) self.main_layout.add_widget(self.firstrow) self.main_layout.add_widget(self.buton) self.main_layout.add_widget(self.secondrow) self.main_layout.add_widget(self.grid_izgara) self.scroll_view.add_widget(self.main_layout) return self.scroll_view Program().run()
关键修改点:
- 初始化
main_layout时添加size_hint_y=None - 绑定
main_layout的minimum_height到自身高度:self.main_layout.bind(minimum_height=self.main_layout.setter("height")) - 给所有TextInput和Solve按钮也设置了
size_hint_y=None, height=44,保证布局高度稳定,避免不可控的高度扩展
这样修改后,当main_layout内部的内容总高度超过ScrollView的高度(900)时,就可以正常滚动了。
内容的提问来源于stack exchange,提问作者Gorbacov
相关产品推荐
相关产品推荐

