首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Kivy:如何在单击按钮时调用函数?

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

Stack Overflow用户
提问于 2017-09-22 03:40:17
回答 7查看 22.7K关注 0票数 9

我在使用kivy库方面还是个新手。

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

app.py:

代码语言:javascript
复制
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()

app.kv:

代码语言:javascript
复制
#:kivy 1.9.1

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

回答 7

Stack Overflow用户

发布于 2017-09-22 07:31:30

模式:.kv

它非常简单,say_hello属于Launch类,所以为了在.kv文件中使用它,您必须编写root.say_hello。请注意,say_hello是您想要执行的函数,因此您不必忘记() -> root.say_hello()

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

代码语言:javascript
复制
#:kivy 1.9.1

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

模式:.py

您可以对函数执行bind操作。

代码语言:javascript
复制
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?抱歉,我不知道。但是你可以在the kivy guide中使用它。

票数 11
EN

Stack Overflow用户

发布于 2019-05-24 18:13:43

代码语言:javascript
复制
from kivy.app import App

from kivy.uix.button import Button

from kivy.uix.label import Label

class Test(App):

def press(self,instance):
    print("Pressed")
def build(self):
    butt=Button(text="Click")
    butt.bind(on_press=self.press) #dont use brackets while calling function
    return butt

Test().run()
票数 3
EN

Stack Overflow用户

发布于 2017-09-22 03:50:51

say_hello是Launch类的一个方法。在您的kv规则中,启动类是根小部件,因此可以使用root关键字访问它:

代码语言:javascript
复制
on_press: root.say_hello()

还要注意,您必须实际调用函数,而不仅仅是写它的名称-冒号右侧的所有内容都是普通的Python代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46351997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档