为什么在Kivy中需要括号而在Python中不需要括号?

arn*_*mez 0 python popup kivy

如果我想on_press在任何程序中向弹出窗口添加事件,我可以直接在python中或使用kv语言.

例如,如果我使用Python

from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.button import Button

class SomePopup(Popup):
    pass

class SomeBox(Box):
    popup = SomePopup()
    popup.title = 'anything'
    popup.content = Button(text='anytext', on_press=popup.dismiss)
Run Code Online (Sandbox Code Playgroud)

在KV语言中,假设我制作相同的弹出窗口,它将是.

<SomePopup>
    title: 'anything'
    content: popupContent
    Button:
        id: popupContent
        text: 'anytext'
        on_press: root.dismiss()
Run Code Online (Sandbox Code Playgroud)

所以,在python中,我必须使用on_press=popup.dismiss和kv语言on_press: root_dismiss()

我不明白为什么在kivy语言中我应该使用括号而不是python.请问你能帮帮我吗?

Mat*_*att 7

虽然两者都实现了相同的功能,但是kv和Python以不同的方式实现它们.

在Python中,当你这样做时Button(text='anytext', on_press=popup.dismiss),你实际上是在告诉kivy:当发生按下时,调用popup.dismiss方法.也就是说,你传给它一个对象(在这种情况下是一个类方法),kivy会在正确的时间调用它.

在kv中,当你这样做时on_press: root.dismiss(),当按下事件发生时,kivy将执行冒号后面的任何文本(root.dismiss()在这种情况下).因此,您需要root.dismiss()在该文本中对自己进行调用.