我定义了两个按钮:一个用kv,一个用Python。它们位于不同的屏幕中,用于在它们之间导航。我发现奇怪的是,在Python中定义的按钮成功切换了屏幕,而在kv中定义的按钮没有。也许我没有正确访问App
类方法?
以下是问题的代码:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.button import Button
Builder.load_string('''
<MyScreen1>:
Button:
id: my_bt
text: "back"
on_release: app.back
''')
class MyScreen1(Screen):
pass
class TestApp(App):
def here(self, btn):
self.sm.current = "back"
def back(self, btn):
self.sm.current = "here"
def build(self):
self.sm = ScreenManager()
s1 = Screen(name = "here")
bt = Button(text = "here",
on_release = self.here)
s2 = MyScreen1(name = "back")
#s2.ids['my_bt'].bind(on_release = self.back)
self.sm.add_widget(s1)
s1.add_widget(bt)
self.sm.add_widget(s2)
return self.sm
TestApp().run()
因此,如果我用kv(on_release
)定义切换功能,我就无法转到"here"
屏幕。但是,如果我在Python中取消注释该行并对on_release: app.back
进行评论,那么一切正常
我非常确定这是访问当前应用的正确方法,因为它不会给我任何错误(这意味着该方法已成功定位)
答案 0 :(得分:0)
这是kv和python之间的细微差别:在kv中你实际上必须写callback as a function call (a python expression),在这种情况下:
on_release: app.back(self)