看看我认为具有相同效果的以下代码:
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:
...但这也不起作用。 模板
功能与我的应用程序兼容吗?
最佳答案
您的问题是 root
的分辨率关键词。在您的动态类定义中,root
指的是类本身,而不是它最终拥有的任何父类。
由于您(大概)确定这些按钮将始终通过添加到 MainWidget 来使用,因此您可以使用 self.parent
而不是root
.
关于python - 模板中的 kivy 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154457/