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 个回答
2
你的问题出在root
这个关键词的理解上。在你动态定义的类里,root
指的是这个类本身,而不是它可能有的任何父类。
因为你(大概)确定这些按钮总是会被添加到MainWidget里,所以你可以用self.parent
来代替root
。