KivyMD 中的 MDSlider 错误 - on_touch_up 在屏幕上单击时被触发

MDSlider Bug in KivyMD - on_touch_up gets fired when clicked on the screen

我遇到了一个问题,我想使用 on_touch_up() 方法在 KivyMD 中获取 MDslider 的值,它有效但问题是即使我 click/touch screen 除了 MDSlider,on_touch_up() 方法被触发。

当我 click/touch 在 MDSlider 上时,该方法被触发了两次

代码

from kivy.lang import Builder, builder
from kivy.uix.screenmanager import ScreenManager, Screen

from kivymd.app import MDApp
from kivymd.uix.button import MDRectangleFlatButton
from kivymd.uix.slider import MDSlider
from kivymd.uix.gridlayout import MDGridLayout


class MyScreen(Screen):
    def __init__(self, **kwargs):
        super(MyScreen, self).__init__(**kwargs)

        self.slider = MDSlider(
            min=0,
            max=100,
            size_hint=(0.4,0.1),
            pos_hint={'center_x':0.5, 'center_y':0.5}
        )
        self.slider.bind(on_touch_up = self.get_slider_value)
        self.add_widget(self.slider)

    def get_slider_value(self, obj, obj_prop):
        print(obj.value)

class MyApp(MDApp):
    def build(self):
        return MyScreen()

if __name__ == "__main__":
    MyApp().run()

Thank you for your time :)

这不是错误,这是设计好的行为。所有 Widgets 都获得了 on_touch_up 事件。您必须使用 collide_point(*touch.pos) 方法来确定触摸是否在您的 Slider 上。但是,on_touch_up() 被触发两次看起来确实像是一个错误。考虑使用:

self.slider.bind(value = self.get_slider_value)

而不是 on_touch_up

要在 get_slider_value() 中使用 collide_point()(如果您绑定到 on_touch_up),请尝试类似的操作:

def get_slider_value(self, slider, touch):
    if slider.collide_point(*touch.pos):
        print(slider.value)