2016-06-11 9 views
0

私は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の間の微妙な違いだ
それは私にすべてのエラーを与えるものではありませんので、私は

答えて

0

(メソッドが正常に位置していたことを意味する)、これは現在のアプリケーションにアクセスするための正しい方法であることをかなり確信しています:kvでは実際にcallback as a function call (a python expression)と書く必要があります。この場合、

on_release: app.back(self) 
関連する問題