2016-12-20 7 views
1

私はkivy言語を使用してウィジェットを定義したいと思いますが、クラスに関数を追加したいと思います。以下は、 "AttributeError: 'MyButton'オブジェクトに 'second_pressed'属性がないというメッセージのボタンをクリックすると失敗する、私の素朴な試みです。
関数とKivy言語で定義された外観を持つクラスを作成するにはどうすればよいですか?kivyレイアウトのクラス

import sys 
from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.boxlayout import BoxLayout 

root = Builder.load_string(''' 
BoxLayout: 
    Label: 
     text: 'hello' 
    MyButton: 

<[email protected]>: 
    text: 'Second button' 
    on_press: self.second_pressed() 
''') 

class MyButton(): 
    def second_pressed(): 
     print "second pressed" 
     sys.stdout.flush() 

class Tryit(App): 
    def build(self): 
     return root 

if __name__ == '__main__': 
    Tryit().run() 

答えて

1
<[email protected]>: 

これは、あなたがそのメソッドを追加したために、あなたのPythonコードでMyButtonとは関係ありませんMyButtonという名前の動的新しいクラスを、定義されています。

代わりに、既存のクラスのルールを示す<MyButton>:と書いてください。また、このクラスが宣言されるまで、Builder.load_stringを遅延させる必要があるかもしれません。これは、重要なことがすべてこの時点で初期化されることが保証されているため、通常、アプリケーションのbuildメソッドで行います。