簡體   English   中英

Kivy ScrollView不適用於on_touch_down方法

[英]Kivy ScrollView Doesn't work with on_touch_down method

我正在嘗試在Widget類中使用ScrollView,但是當我放置on_touch_down方法時它不起作用。 怎么了 如何解決呢?

這是一個代碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.widget import Widget

Window.size = (520, 960)


class GameManager(Widget):

    def __init__(self, **kwargs):
        super(GameManager, self).__init__(**kwargs)
        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=str(i), size_hint_y=None, height=40)
            layout.add_widget(btn)
        root = ScrollView(size_hint=(1, None), size=(Window.width/2, Window.height*3/4))
        root.add_widget(layout)
        self.add_widget(root)

    #When I delete this method everything is fine
    def on_touch_down(self, touch): 
        if self.collide_point(*touch.pos):
             pass


class ScrollViewApp(App):
    game = GameManager()

touch_down事件沿小部件樹傳播,首先傳遞給根小部件,然后讓每個小部件將觸摸傳遞給其子級。 問題是,您on_touch_down方法,並且事件沒有傳播,因此,您的ScrollView不響應此事件。

您應該只調用父級的on_touch_downd方法以允許事件傳播:

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
             pass

        super(GameManager, self).on_touch_down(touch)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM