Kivy - ScrollView 小部件
Kivy 框架中的 ScrollView 小部件可封装任何尺寸大于分配给它的尺寸的其他小部件,并为其提供可滚动面板。这使封装的小部件可以垂直或水平平移/滚动。
ScrollView 类在 kivy.uix.scrollview 模块中定义。您通常在布局中组合一个或多个小部件,并将布局添加到 ScrollView。
from kivy.uix.scrollview import ScrollView view = ScrollView() view.add_widget(layout)
ScrollView 对象的"scroll_x"和"scroll_y"属性控制滚动面板的滚动行为。ScollView 支持双向滚动。您可以通过将"do_scroll_x"或"do_scroll_y"设置为 False 来禁用轴上的滚动。
此外,"scroll_distance"属性设置行进的最小距离,默认为 20 像素。此外,scroll_timeout 属性指定最大时间段,默认为 55 毫秒。
"scroll_distance"和"scroll_timeout"的意义在于:如果触摸手势滚动的像素数大于或等于 scroll_distance,并且在 scroll_timeout 时间段内,则将其识别为滚动手势并开始平移(滚动/平移)。如果发生超时,则触摸事件将传播给子级。
ScrollView 类的其他属性如下所示 −
do_scroll −允许在 X 或 Y 轴上滚动。
do_scroll_x − 允许在 X 轴上滚动。这是一个 BooleanProperty,默认为 True。
do_scroll_y − 允许在 Y 轴上滚动。这是一个 BooleanProperty,默认为 True。
scroll_distance − 滚动 ScrollView 之前要移动的距离,以像素为单位。它是一个 NumericProperty,默认为 20 像素。
scroll_timeout − 允许触发 scroll_distance 的超时时间,以毫秒为单位,默认为 55 毫秒
scroll_to() −滚动视口以确保给定的小部件可见,可选择使用填充和动画。
scroll_type − 设置用于滚动视图内容的滚动类型。可用选项为:['content']、['bars']、['bars', 'content']。
ScrollView 对象发出以下事件 −
on_scroll_start − 当滚动从触摸开始时触发的通用事件。
on_scroll_move − 当滚动从触摸移动时触发的通用事件。
on_scroll_stop −滚动因触摸而停止时触发的通用事件。
示例
为了能够理解 ScrollView 的工作原理,我们需要一个足够大的布局,以便它溢出主应用程序窗口的尺寸。为此,我们将 1oo 个按钮添加到单列网格布局中,并将滚动视图应用于它。
以下示例中的操作代码如下 −
layout = GridLayout(cols=1) for i in range(100): btn = Button(text='Button ' + str(i), size_hint_y=None, height=40) layout.add_widget(btn) root = ScrollView() root.add_widget(layout)
为确保高度足以滚动,请将布局对象的 minimum_height 属性绑定到其设置器。
layout.bind(minimum_height=layout.setter('height'))
以下是 ScrollView 演示代码的完整代码−
from kivy.uix.gridlayout import GridLayout from kivy.uix.button import Button from kivy.uix.scrollview import ScrollView from kivy.app import App from kivy.core.window import Window Window.size = (720, 350) class scrollableapp(App): def build(self): layout = GridLayout(cols=1, spacing=10, size_hint_y=None) layout.bind(minimum_height=layout.setter('height')) for i in range(100): btn = Button(text='Button ' + str(i), size_hint_y=None, height=40) layout.add_widget(btn) root = ScrollView( size_hint=(1, None), size=(Window.width, Window.height) ) root.add_widget(layout) return root scrollableapp().run()
输出
运行上述代码。要超出视图中可见的按钮,请使用鼠标或手指(如果您使用的是支持触摸的设备)垂直滚动。