私は2つのボタンを定義しました:1つはkvで、もう1つはPythonで定義されています。それらは異なる画面に配置され、それらの間をナビゲートするために使用されます。私が奇妙に思ったのは、Pythonで定義されたボタンは、kvで定義されたボタンが画面を切り替えるのに成功したということです。おそらく私はApp
クラスメソッドに正しくアクセスしていないでしょうか?ここ
は、問題のコードです:なぜ画面のkvバインディングが機能しないのですか?
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
とコメントすれば、すべて正常に動作します。 KVとPythonの間の微妙な違いだ
それは私にすべてのエラーを与えるものではありませんので、私は