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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:25:23