2017-07-18 66 views
2

我有一个屏幕,其中我有可滚动boxlayout。它工作正常,我可以通过标签,文本输入框和按钮滚动屏幕滚动视图和触摸事件不能在基夫一起工作

#kvfile 
<FirstScreen>: 
    ScrollView: 
     BoxLayout: 
      orientation:"vertical" 
      size_hint_y: None 
      height: self.minimum_height 
      #here some scrollable labels, text inputs, and buttons 

#python file 
class FirstScreen(Screen): 
    ''' 
    initial = 0 
    def on_touch_down(self, touch): 
     self.initial = touch.x 

    def on_touch_up(self, touch): 
     if touch.x > self.initial: 
      # do something 
     elif touch.x < self.initial: 
      # do other thing 
     else: 
      # what happens if there is no move 
    ''' 
    pass 

里面可是当我增加了一个触摸事件检测左,右轻扫滚动被禁用。现在我可以左键,右键滑动但不滚动。如何启用滚动以及滑动?

回答

1

您正在使用此代码中断event bubbling,并且布局子项的on_touch_down方法根本不会被调用。一般来说,你应该总是返回True或传递事件(或两者的某种组合)。

class FirstScreen(Screen): 
    initial = 0 
    def on_touch_down(self, touch): 
     self.initial = touch.x 
     return super(Screen, self).on_touch_down(touch) #pass the touch on 

    def on_touch_up(self, touch): 
     if touch.x > self.initial: 
      print "left" 
      return True #don't pass the touch on 
     elif touch.x < self.initial: 
      print "right" 
      return True 
     else: 
      print "no" 
      return super(Screen, self).on_touch_up(touch) 
+0

目前的解决方案只能部分工作。我正在开发这个在我的电脑中,它看起来像滚动只有当我们使用鼠标的滚动按钮,我们不能通过触摸滚动。 – Eka

+0

可能是因为当通过触摸滚动时,您仍然无意中更改了“x”坐标,然后条件就会触发并终止事件。您需要一些方法来区分用户*想要*刷卡或滚动,然后“返回True”或通过事件。 (或者,如果他们不以某种方式冲突,你总是可以传递事件)。例如,你可以为滑动设置一些最小距离,如果abs(touch.x - self.initial)> X' ... – KGS

+0

这是我用来左右滚动的条件'p =(touch.x- self.initial)/ self.initial',我已经添加了一个阈值来检测左右滑动。我认为scrollview已启用,但我的触摸事件是滚动视图的触摸。我需要一些方法来启用滚动视图的触摸上下滑动。我不知道该怎么做。我可以使用这个'p =(touch.y-self.initial)/ self.initial'来检测向上/向下滑动,但是如何启用滚动视图触摸 – Eka