模板中的kivy事件处理程序

时间:2014-03-03 18:30:54

标签: python kivy

看一下我认为具有同等效果的以下代码:

main.py对于这两个版本都是一样的,而且很无聊:

from kivy.app import App
from kivy.uix.widget import Widget

class MainWidget(Widget):
    def callback(self):
        pass        

class MainApp(App):
    pass

if __name__ == "__main__":
    MainApp().run()⏎ 

main.kv的工作版如下:

MainWidget:
    Button:
        text: "Buttontext"
        on_press: root.callback()
    Button:
        text: "Buttontext"
        on_press: root.callback()

我想为许多按钮重复一遍!这就是为什么我认为解决方案看起来像这样:

<TB@Button>:
    text: "Buttontext"
    on_press: root.callback()

MainWidget:
    TB:
    TB:

哪个不起作用。我将示例调整为如下:

<TB@Button>:
    text: "Buttontext"
    on_press: main.callback()

MainWidget:
    id: main
    TB:
    TB:

......但这也不起作用。 template - 功能是否与我的应用程序兼容?

1 个答案:

答案 0 :(得分:2)

您的问题是root关键字的解析。在你的dyanmic类定义中,root指的是类本身,而不是它最终拥有的任何父类。

由于您(可能)确定按钮将始终通过添加到MainWidget来使用,因此您可以使用self.parent代替root