Kivy中Scroll View使用与搜索结果部件清空问题求助
问题解决与代码修改
1. 修复重复点击搜索无法清空结果的问题
你的代码里用了self.print作为结果容器的变量名,但print是Python的内置函数,这会导致命名冲突,使得clear_widgets()调用失效。把变量名改成非内置函数的名称,比如self.result_grid即可解决。
2. 添加搜索结果的滚动功能
需要使用Kivy的ScrollView组件,将结果GridLayout嵌套在ScrollView中,同时要确保ScrollView的子部件(即结果GridLayout)的size_hint_y设为None,并通过bind方法让GridLayout的高度随内部部件总高度自动调整,这样ScrollView才能正常滚动。
修改后的完整代码
import kivy from kivy.app import App from kivy.uix.label import Label from kivy.uix.gridlayout import GridLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.uix.scrollview import ScrollView class MyGrid(GridLayout): def __init__(self, **kwargs): super(MyGrid, self).__init__(**kwargs) self.cols = 1 self.inside = GridLayout() self.inside.cols = 2 self.inside.add_widget(Label(text="Label Name: ")) self.label_name = TextInput(multiline=False) self.inside.add_widget(self.label_name) self.add_widget(self.inside) self.search = Button(text="Search", font_size=30) self.search.bind(on_press=self.pressed) self.add_widget(self.search) # 创建ScrollView用于滚动结果 self.scroll_view = ScrollView() # 重命名结果容器,避免与内置函数print冲突 self.result_grid = GridLayout(cols=1, size_hint_y=None) # 绑定结果容器的高度,使其随内部部件总高度自适应 self.result_grid.bind(minimum_height=self.result_grid.setter('height')) self.scroll_view.add_widget(self.result_grid) self.add_widget(self.scroll_view) def pressed(self, instance): # 清空结果容器 self.result_grid.clear_widgets() # 模拟从xlsx加载的结果,实际替换为你的xlsx读取逻辑 for info in range(10): btn = Button(text=str(info), size_hint_y=None, height=40) self.result_grid.add_widget(btn) class MyApp(App): def build(self): return MyGrid() if __name__ == "__main__": MyApp().run()
关键修改说明
- 变量名
self.print改为self.result_grid,解决命名冲突问题 - 引入
ScrollView组件,将result_grid放入其中 - 给
result_grid设置size_hint_y=None,并绑定minimum_height到自身高度,确保ScrollView能正确计算滚动范围
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

