基维,KV语言上的动态类

2024-05-08 11:40:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用我的KV语言上的一个规则来生成on上的类,但是我总是得到一个错误。在

<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类是FloatInput,否则是TextInput。在


Tags: 语言idmessageinputon规则type错误
1条回答
网友
1楼 · 发布于 2024-05-08 11:40:12

单用kvlang是不可能做到的。至少不是直接的。你有4种选择:

  1. 根据小部件的属性设置input_type

    TextInput:
        hint_text: 'int'
        input_type: 'int' if self.hint_text == 'int' else 'float'
    
  2. 从外部更改input.input_type属性(如果差异仅为输入类型)

  3. 动态添加正确的小部件,例如在某个事件上使用<parent>.add_widget(Factory.FloatInput()),比如说Buttonon_release
  4. 在构建布局时,尤其是在__init__中使用Python。这比在kv中添加小部件而纠结于实现不存在的东西或寻找合适的事件来使用它要容易得多。它更灵活。在

尽管文档中可能提到了:之后的所有内容都像一个普通的Python,但这适用于小部件属性和事件,而不是小部件本身:

不好:

^{pr2}$

好:

TextInput:
    text: 'int'
    # property:  v        Python        -v
    input_type: 'int' if self.text == 'int' else 'float'

相关问题 更多 >