Python/Kivy:双击标签时调用函数

问题描述 投票:0回答:2

double
点击
label
时如何调用函数?现在它调用
single
点击。用什么代替
on_ref_press

layout.add_widget(
    MyLabel(text='[ref=world]' + str('Test') + '[/ref]', padding_x=10,
            size_hint_x=.35, halign='left',
            markup=True, on_ref_press=partial(self.xyz, 10)))
python-2.7 kivy kivy-language
2个回答
3
投票

一个可能的解决方案是创建事件,在下面的代码中我展示了一个示例:

from kivy.app import App

from kivy.uix.label import Label


class DoubleClickableLabel(Label):
    def __init__(self, **kwargs):
        Label.__init__(self, **kwargs)
        self.register_event_type('on_double_press')
        if kwargs.get("on_double_press") is not None:
            self.bind(on_double_press=kwargs.get("on_double_press"))

    def on_touch_down(self, touch):
        if touch.is_double_tap:
            self.dispatch('on_double_press', touch)
            return True
        return Label.on_touch_down(self, touch)

    def on_double_press(self, *args):
        pass


class MyApp(App):
    def build(self):
        label = DoubleClickableLabel(text='Hello world', on_double_press=self.callback)
        return label

    def callback(self, *args):
        print("double clicked", args[0])


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

0
投票

您还可以使用TouchBehavior

from kivymd.uix.behaviors import TouchBehavior
class DoubleClickableLabel(Label, TouchBehavior):
    def __init__(**kwargs):
        self.custom_double_tap = None
        if kwargs.get('on_double_tap') is not None:
            self.custom_double_tap = kwargs['on_double_tap']

    def on_double_tap(self, *args):
        if self.custom_double_tap:
            self.custom_double_tap()

然后创建一个小部件:

class MyApp(App):
    def build(self):
        label = DoubleClickableLabel(text='Hello world', 
on_double_tap=self.callback)
        return label

    def callback(self, *args):
        print("double clicked", args[0])
© www.soinside.com 2019 - 2024. All rights reserved.