2016-11-11 42 views
1

私はKV言語でクラスを生成するためにルールを使用しようとしていますが、常にエラーが発生します。Kivy、DynimicクラスのKV言語

<SimpleInputLayout>: 
    orientation: 'vertical' 

    message_label: message 
    user_input: input 

    Label: 
     id: message 
     text: root.message_to_user 
    FloatInput: if input_type == 'float' else TextInput: 
     id: input 
     focus: True 

私はこの作品を作るために何ができる、input_typeが等しい'float'ある場合、私は私のinputクラスが他のTextInputFloatInputになりたいです。

答えて

0

このようなことはkvというだけではできません。少なくとも直接的ではありません。 (違いは唯一の入力タイプの場合)

  • TextInput: 
        hint_text: 'int' 
        input_type: 'int' if self.hint_text == 'int' else 'float' 
    
  • 変更外部からinput.input_typeプロパティ追加:

    ウィジェットのプロパティに応じてinput_type設定し
    1. :あなたは〜4つのオプションを持っています例えば右のウィジェットを動的に<parent>.add_widget(Factory.FloatInput())の場合はのButton

    2. とすると、レイアウトをビルドするときには、特に__init__になります。 kvにウィジェットを追加するための適切なイベントを探したり、そこに存在しないものを実装しようとするのが面倒です。より柔軟です。おそらくドキュメントに挙げるですが

    それが適用される:カジュアルPythonのように動作しますが、後にすべてがプロパティに&イベントをウィジェットにという事は、自分自身をウィジェットしない:

    悪い:

    v--rule-- : v------------ not Python -------------v 
    FloatInput: if input_type == 'float' else TextInput: 
    

    良い:

    TextInput: 
        text: 'int' 
        # property: v-------------- Python ---------------v 
        input_type: 'int' if self.text == 'int' else 'float' 
    
  • 関連する問題