Sideband/sbapp/kivymd/effects/roulettescroll
2022-07-07 22:16:10 +02:00
..
__init__.py Restructured repository 2022-07-07 22:16:10 +02:00
LICENSE Restructured repository 2022-07-07 22:16:10 +02:00
README.md Restructured repository 2022-07-07 22:16:10 +02:00
roulettescroll.py Restructured repository 2022-07-07 22:16:10 +02:00

RouletteScrollEffect

This is a subclass of kivy.effects.ScrollEffect that simulates the motion of a roulette, or a notched wheel (think Wheel of Fortune). It is primarily designed for emulating the effect of the iOS and android date pickers.

Usage

Here's an example of using RouletteScrollEffect for a kivy.uix.scrollview.ScrollView:

    from kivy.uix.gridlayout import GridLayout
    from kivy.uix.button import Button
    from kivy.uix.scrollview import ScrollView

    # Preparing a `GridLayout` inside a `ScrollView`.
    layout = GridLayout(cols=1, padding=10, size_hint=(None, None), width=500)
    layout.bind(minimum_height=layout.setter('height'))

    for i in range(30):
        btn = Button(text=str(i), size=(480, 40), size_hint=(None, None))
        layout.add_widget(btn)

    root = ScrollView(
        size_hint=(None, None),
        size=(500, 320),
        pos_hint={'center_x': .5, 'center_y': .5},
        do_scroll_x=False,
        )
    root.add_widget(layout)

    # Preparation complete. Now add the new scroll effect.
    root.effect_y = RouletteScrollEffect(anchor=20, interval=40)
    runTouchApp(root)

Here the ScrollView scrolls through a series of buttons with height 40. We then attached a RouletteScrollEffect with interval 40, corresponding to the button heights. This allows the scrolling to stop at the same offset no matter where it stops. The RouletteScrollEffect.anchor adjusts this offset.

Customizations

Other settings that can be played with include:

  • RouletteScrollEffect.pull_duration
  • RouletteScrollEffect.coasting_alpha
  • RouletteScrollEffect.pull_back_velocity
  • RouletteScrollEffect.terminal_velocity

See their module documentations for details.

RouletteScrollEffect has one event on_coasted_to_stop that is fired when the roulette stops, "making a selection". It can be listened to for handling or cleaning up choice making.