gpt4 book ai didi

python - 忽略 ScrollView 中的滚动交互区域

转载 作者:行者123 更新时间:2023-11-28 22:38:18 25 4
gpt4 key购买 nike

假设我有这个 UI 从 ScrollView 示例改编而来:

from kivy.app import App
from kivy.uix.slider import Slider
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout

class ScrollViewApp(App):
def build(self):
layout = GridLayout(cols=1, padding=10, spacing=10,
size_hint=(None, None), width=500)
layout.bind(minimum_height=layout.setter('height'))
for i in range(15):
blt = BoxLayout(size_hint=(None, None), size=(480, 40))
blt.add_widget(Label(text="Slider %d" % i))
btn = Slider(value=i, min=0, max=42, size=(400, 40),
size_hint=(None, None))
blt.add_widget(btn)
layout.add_widget(blt)
scroll = ScrollView(size_hint=(None, None), size=(500, 320),
pos_hint={'center_x': .5, 'center_y': .5}, do_scroll_x=False)
scroll.add_widget(layout)
return scroll

if __name__ == '__main__':
ScrollViewApp().run()

由于 scroll_timeout,与 Slider 的交互被延迟。是否可以在 ScrollView 中定义区域,其中 touch 事件直接传递给子级而没有延迟(并且不启动滚动)?

最佳答案

看看Widget touch event bubbling .

我从来没有和你做过同样的事情,但也许你可以创建一个自定义类来继承 ScrollView 并覆盖 on_touch_down 事件,你可以:

  1. 禁用滚动
  2. 调用super.on_touch_down
  3. 启用滚动。

另一种方法可能是创建一个自定义小部件,它继承用户单击的 Slider 类。然后用 return True 重载它的 on_touch_down 方法。 Documentation says :

In order to stop this event bubbling, one of these methods must return True

ScrollView 还会触发 on_scroll_start 事件,因此也许您可以在那里做类似的事情。

关于python - 忽略 ScrollView 中的滚动交互区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35710329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com