Kivy - ScrollView

创建于 2024-12-03 / 24
字体: [默认] [大] [更大]

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()

输出

运行上述代码。要超出视图中可见的按钮,请使用鼠标或手指(如果您使用的是支持触摸的设备)垂直滚动。

Kivy Scrollview

0 人点赞过