【问题标题】:Kivy slider override on_touch_upKivy 滑块覆盖 on_touch_up
【发布时间】:2017-06-19 10:30:34
【问题描述】:

我正在尝试构建我的第一个 kivy 应用程序并创建一个简单的音频剪切工具。我正在使用滑块小部件来显示正在播放的歌曲中的位置(到目前为止有效),但我想让用户能够将滑块移动到所需位置并从所选位置播放歌曲。

到目前为止我的代码:

文件 main.py:

播放歌曲时自动移动(时钟间隔回调):

def my_callback(self, dt):
    if not self.loaded:
        pass
    else:
        if self.playing:
            self.position = self.song.get_pos()
            self.truePos_slider.value = 100 * self.position / self.duration

当用户触摸滑块并将其移动到另一个位置时,应该会发生这种情况:

def slider_move(self):
    if self.loaded:
        self.position = (self.truePos_slider.value/100) * self.duration

文件布局.kv:

...
        BoxLayout:
            orientation: 'vertical'
            Slider:
                id: truePos_slider
                on_release: root.slider_move()
...

问题是来自 kivy 的 Slider 没有 Button 的 on_release 事件。我认为我的问题与此处描述的类似:

Kivy slider event on_release

我实际上喜欢恶劣的解决方案,但我不知道我应该将 MySliderSubclass 的代码与 override 方法放在哪里,以便让我的 layout.kv 文件识别它。你能帮帮我吗?

如果这是一个愚蠢的问题,我很抱歉,我实际上也是 Python 的新手......

【问题讨论】:

  • 欢迎来到 Stack Overflow!请edit您的问题显示the code you have so far。您应该至少包含您遇到问题的代码的大纲(但最好是minimal reproducible example),然后我们可以尝试帮助解决具体问题。您还应该阅读How to Ask
  • @TobySpeight 感谢您的帮助!我按照您的建议添加了代码的重要部分。

标签: python slider kivy


【解决方案1】:

如果您想使用on_touch_up,只需将.kv 文件中的on_release 替换为它,所有事件都可以这样调用。您实际上不需要继承滑块类。 on_touch_up 是所有小部件共享的事件,因为它是在小部件类本身中实现的。

【讨论】:

  • 感谢您对@KGS 的建议,但不幸的是,on_touch_up 没有按照我需要的方式工作。如果我将on_touch_up 写在on_release 的位置上,则函数root.slider_move() 会在整个应用程序中的每次触摸时被调用,即使是从其他按钮和小部件,不仅仅是在特定滑块的触摸......跨度>
  • 发生这种情况是因为在 kivy 中事件按顺序传递给所有小部件,除非您通过在适当的函数中返回 True 来中断事件冒泡,和/或仅在触摸碰撞时触发事件与小部件。参考这个:kivy.org/docs/api-kivy.uix.widget.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2015-11-14
相关资源
最近更新 更多