2017-12-10 4 views
2

これは、私の実際のプログラムから単純化されたボタン1または2を押すと、 "Hello"または "Good-bye"を表示するサンプルプログラムです。
ボタン1を押さずに、プログラム起動時に関数btn1()を実行し、 "Hello"を表示することです。
どの行のコードを追加すればよいですか?
クラスGreetingsに「Greetings()。btn1()」を挿入すると、エラー:「名前グリーティングが定義されていません」が発生しました。その後、GreetingAppクラスのdefビルド(自己)の後に同じコマンドを入れましたが、何も起こりませんでした。 main.pyでPython:クラス内からの関数呼び出し

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 

class Greetings(BoxLayout): 
    greeting=StringProperty() 

    def btn1(self): 
     self.greeting='Hello.' 

    def btn2(self): 
     self.greeting='Good-bye.' 

class GreetingApp(App): 
    def build(self): 
     return Greetings() 

GreetingApp().run() 

そしてgreeting.kvで、

#: import main main 

Greetings: 
<Greetings>: 

    orientation: "vertical" 
    Label: 
     text: root.greeting 
    BoxLayout: 
     orientation: "horizontal" 
     Button: 
      text: '1' 
      on_press: root.btn1() 
     Button: 
      text: '2' 
      on_press: root.btn2() 

答えて

0

ただ、ルートウィジェットを返す前にbtn1を呼び出す:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.lang import Builder 


Builder.load_string(''' 
<Greetings>: 
    orientation: "vertical" 

    Label: 
     text: root.greeting 
    BoxLayout: 
     orientation: "horizontal" 

     Button: 
      text: '1' 
      on_press: root.btn1() 
     Button: 
      text: '2' 
      on_press: root.btn2() 
''') 


class Greetings(BoxLayout): 
    greeting = StringProperty() 

    def btn1(self): 
     self.greeting = 'Hello.' 

    def btn2(self): 
     self.greeting = 'Good-bye.' 

class GreetingApp(App): 
    def build(self): 
     root = Greetings() 
     root.btn1() 

     return root 

GreetingApp().run() 
+0

ありがとうございます。できます! – user9037109

+0

あなたは大歓迎です。 – Fogapod

0

__init__方法が毎回実行されますクラスのインスタンスを作成します。
オブジェクトの作成時にこれまでにやりたかったことは、__init__に入れることができます。オブジェクトを開始します。
Greetingsクラスに入れてください。

def __init__(self, **kwargs): 
    super(Greetings, self).__init__(**kwargs) 
    self.btn1() 

オブジェクトを作成するときに呼び出されます。

+0

コードも正常に動作します。ありがとう。私はそれが何をしているのか理解しようとします。 – user9037109

+0

@ user9037109をもう少し説明して更新しました。それ以上の説明が必要かどうか教えてください。 – EL3PHANTEN

+0

詳細な説明をいただきありがとうございます。私はなぜ最初の議論(挨拶)が必要なのか疑問に思った。彼らは明示的なことが暗黙のものよりも良いと言います。 – user9037109

関連する問題