用户点击 MDIcon 时的绑定功能

Bind function on user click on MDIcon

我认为这是一个简单的问题,但我在 doc 或 Whosebug 帖子上没有找到正确的函数。

from kivymd.app import MDApp
from kivy.lang import Builder

KV = '''
BoxLayout:
    MDIcon:
        halign: "center"
        icon: "language-python"
'''

class TestApp(MDApp):

    def build(self):
        return Builder.load_string(KV)

    def on_icon_click(self, widget):
        print("someone clicked on me")

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

我想出了一个解决方案(不漂亮但很管用)。

from kivymd.app import MDApp
from kivy.lang import Builder
from kivymd.uix.label import MDIcon
from kivy.uix.behaviors import ButtonBehavior

class ClickableMDIcon(ButtonBehavior, MDIcon):
    pass

KV = '''
BoxLayout:
    ClickableMDIcon:
        halign: "center"
        icon: "language-python"
'''

class TestApp(MDApp):
    def build(self):
        box = Builder.load_string(KV)
        box.children[0].bind(on_touch_down = lambda widget, touch: self.on_icon_click())
        return box

    def on_icon_click(self):
        print("someone clicked on me")

if __name__ == '__main__':
    TestApp().run()
from kivymd.app import MDApp
from kivy.lang import Builder

KV = '''
BoxLayout:
    MDIconButton:
        halign: "center"
        icon: "language-python"
        on_press: app.on_icon_click()
'''

class TestApp(MDApp):

    def build(self):
        return Builder.load_string(KV)

    def on_icon_click(self):
        print("someone clicked on me")

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