2017-05-03 21 views
0

私は約1週間前にcodeacademyからpythonを学んだことがあり、pythonとkivyの初心者は完全に初心者です。Kivy Python - NumericPropertyを使わずに変数をインクリメントするボタン

誰かが私に説明してください理由は、以下のコードは、ボタンで増分されているnが表示されたラベルの画面にならないのですか?

Pythonのファイル作るのn = NumericProperty(0)この作品を作る理由

<Example>: 
    BoxLayout: 
     Label: 
      text: str(root.n) 
     Button: 
      text: "+1" 
      on_press: root.n_plus() 

は、その後、あなたが説明できる

import kivy 
from kivy.app import App 
from kivy.uix.button import Button, Label 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import NumericProperty 


class Example(BoxLayout): 
    n = 0 

    def n_plus(self): 
     self.n += 1 


class ExampleApp(App): 

    def build(self): 
     return Example() 

example = ExampleApp() 
example.run() 

KVファイル?

数値プロパティで動作しないnの関数をいくつか実行したいと思います。

+0

これを見る1つの方法は、.kvです。あなたのPythonで何が起こっているのかわかりません。したがって、あなたは "ヘルプ"する必要があります。.kv Pythonで起こっている変更を "見る":これは "バインディング"と呼ばれます。 NumericProperty(0)(またはObjectPropertyやStringPropertyのようなプロパティ)を使用することはバインディングの方法です。 これまでのところ私は理解しています。私はkivy(2〜3週間前)もやっていますので、もっと正確には申し訳ありません。 – Enora

+0

.kvがPythonで何が起こっているかを "見る"ように強制する別の方法は、Pythonであなたのラベルのテキストを更新することです:http://codepad.org/kg5Kd5pT – Enora

答えて

1

あなたは、公式文書としてNumericProperty() を使用した場合ので、言った:

それはあなたのオブジェクトの変更、 その属性を参照するすべてのプロパティの属性が自動的にあるとき を更新するようなイベントを生成します。

だから、要するに、それはそのクラスの結合あなたのUIとの関係( .kv)と属性を作成します

.py

しかし、実際には、あなたがからの助けを借りずに自分でUIを変更することができますキビーフレームワーク。 self.ids.your_id_in_kv_file

を使用して

  • アクセスをあなたのウィジェットにid属性をid属性を追加します

    1. しかし、今、あなたを更新する必要があるため、それは、明らかに良くありません:私は次のようにあなたの例を変更しましたあなたがあなたのUIを更新するたびに自分でUIを作成します。しかし、kivyのXXXXPropertyでは、その属性の値を変更するだけで、UIについてはまったく心配する必要はありません。

      ソリューションの別の欠点は、あなたがUIを変更する必要があるとき、あなたは自分でそれらのすべてを変更した場合、コードのトンを変更する必要がある、ということです...

      ここでは一例です:

      import kivy 
      
      from kivy.app import App 
      from kivy.uix.label import Label 
      from kivy.lang.builder import Builder 
      from kivy.uix.boxlayout import BoxLayout 
      
      Builder.load_string(""" 
      <Example>: 
          BoxLayout: 
           Label: 
            id: lbl 
            text: "0" 
           Button: 
            text: "+1" 
            on_press: root.n_plus() 
      """) 
      
      class Example(BoxLayout): 
      
           def n_plus(self): 
           value = self.ids.lbl.text 
           self.ids.lbl.text = str(int(value) + 1) 
      
      
      class ExampleApp(App): 
      
          def build(self): 
           return Example() 
      
      
      if __name__ == '__main__': 
          ExampleApp().run() 
      
  • 関連する問題