Python Kivy:如何在单击按钮时调用函数?

新手上路,请多包涵

我对使用 kivy 库还很陌生。

我有一个 app.py 文件和一个 app.kv 文件,我的问题是我无法在按下按钮时调用函数。

应用程序.py:

 import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button

class Launch(BoxLayout):
    def __init__(self, **kwargs):
        super(Launch, self).__init__(**kwargs)

    def say_hello(self):
        print "hello"

class App(App):
    def build(self):
        return Launch()

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

应用程序.kv:

 #:kivy 1.9.1

<Launch>:
    BoxLayout:
        Button:
            size:(80,80)
            size_hint:(None,None)
            text:"Click me"
            on_press: say_hello

原文由 Mike Delta 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 568
1 个回答

模式: .kv

It’s very simple, say_hello belongs to the Launch class so in order to use it in your .kv file you have to write root.say_hello .请注意 say_hello 是您要执行的函数,因此您不必忘记 () —> root.say_hello()

此外,如果 say_helloApp 类中,您应该使用 App.say_hello() 因为它属于应用程序。 (注意:即使您的 App 类是 class MyFantasicApp(App): 它也总是 App.say_hello()app.say_hello() 我不记得了,抱歉)。

 #:kivy 1.9.1

<Launch>:
    BoxLayout:
        Button:
            size:(80,80)
            size_hint:(None,None)
            text:"Click me"
            on_press: root.say_hello()

模式: .py

你可以 bind 这个功能。

 from kivy.uix.button import Button # You would need futhermore this
class Launch(BoxLayout):
    def __init__(self, **kwargs):
        super(Launch, self).__init__(**kwargs)
        mybutton = Button(
                            text = 'Click me',
                            size = (80,80),
                            size_hint = (None,None)
                          )
        mybutton.bind(on_press = self.say_hello) # Note: here say_hello doesn't have brackets.
        Launch.add_widget(mybutton)

    def say_hello(self):
        print "hello"

为什么使用 bind ?对不起,不知道。但是你在 kivy 指南 中使用它。

原文由 Ender Look 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题