【问题标题】:Kivy Slider Touch Input Area Too LargeKivy 滑块触摸输入区域太大
【发布时间】:2018-08-31 00:10:23
【问题描述】:

我正在尝试使用 Kivy 创建游戏,当我尝试使用 Slider 小部件时,我无法让它停止对附近的触摸输入做出反应。我在网上看了看,找不到任何方法来控制小部件的反应区域。任何帮助,将不胜感激!下面是一个非常简单的 Kivy Slider 应用程序,我尝试隔离解决方案。

Test.py:

import kivy
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Window.size = (375,375)
Builder.load_file('Test.kv')
sm=ScreenManager()
class SliderScreen(Screen):
    pass    
class Test(App):
    def build(self):
        return sm
sm.add_widget(SliderScreen(name='sliderscreen'))
Test().run()

Test.kv:

<SliderScreen>:
    FloatLayout:
        Slider:
            pos_hint:{'x':.15,'y':.275}
            size_hint:.75,.25
            value_track:True
            background_width: 10
            value_track_color: 0,.4,.8,1
            min:0
            sensitivity: 'handle'
            max: 300

提前谢谢你!

【问题讨论】:

  • 我想我们可能需要更多信息来帮助您。我已经运行了您发布的代码,但没有看到对触摸事件的任何反应(除了在滑块手柄上触摸和拖动)。如果除了您在发布的代码中显示的内容之外,您还使用on_touch 事件,请注意touch 事件会传播到所有小部件,因此您可能需要进行碰撞测试以确定它是否与Slider 与否。查看Widget docs 中的“Widget 触摸事件冒泡”和collide_point()
  • 澄清:问题是当我在滑块附近触摸时(显然不是在它的任何部分),它仍然会做出反应,就好像我在触摸滑块一样。如果我按下滑块上方并水平拖动,它会滑动(尽管我实际上没有按下它)。这不是其他小部件的问题,因为没有(这是上面的所有代码)。

标签: python slider kivy


【解决方案1】:

如果有人仍在寻找答案,如果您不想直观地修改您的小部件,请覆盖处理触摸输入的collide_point() 方法。

为此,您需要创建一个自定义小部件类,如下所示:

class CustomSlider(Slider):
    def collide_point(self, x, y):
        return self.x <= x <= self.right and self.y+40 <= y <= self.top-40

这样做的是,它改变了在 Widget 内验证触摸的条件。修改检查比实际小部件更小的区域。如果这些值对您不起作用,请随意尝试,代码非常不言自明。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多