Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy,KV语言上的动态类_Python_Python 3.x_Kivy_Kivy Language - Fatal编程技术网

Python Kivy,KV语言上的动态类

Python Kivy,KV语言上的动态类,python,python-3.x,kivy,kivy-language,Python,Python 3.x,Kivy,Kivy Language,我试图在我的KV语言上使用一个规则来生成on上的类,但我总是会得到一个错误 <SimpleInputLayout>: orientation: 'vertical' message_label: message user_input: input Label: id: message text: root.message_to_user FloatInput: if input_type == 'float'

我试图在我的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
:
方向:“垂直”
消息标签:消息
用户输入:输入
标签:
id:消息
text:root.message\u发送给用户
FloatInput:如果输入类型=='float'其他文本输入:
id:输入
焦点:正确

如果
input\u type
等于
'float'
我想让我的
input
类成为
FloatInput
,否则
TextInput
单凭
kv
lang是不可能的。至少不是直接的。您有4种选择:

  • 根据小部件的属性设置
    input\u type

    TextInput:
        hint_text: 'int'
        input_type: 'int' if self.hint_text == 'int' else 'float'
    
  • 从外部更改
    input.input\u type
    属性(如果差异只是输入类型)

  • 动态添加正确的小部件,例如在某个事件上添加小部件(Factory.FloatInput()),比如在
    按钮的
    释放时添加
  • 在Python中执行此操作,尤其是在构建布局时在
    \uuuuu init\uuuu
    中。这比在
    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'
    
    好:

    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'
    

    这样的事情单靠
    kv
    lang是不可能的。至少不是直接的。您有4种选择:

  • 根据小部件的属性设置
    input\u type

    TextInput:
        hint_text: 'int'
        input_type: 'int' if self.hint_text == 'int' else 'float'
    
  • 从外部更改
    input.input\u type
    属性(如果差异只是输入类型)

  • 动态添加正确的小部件,例如在某个事件上添加小部件(Factory.FloatInput()),比如在
    按钮的
    释放时添加
  • 在Python中执行此操作,尤其是在构建布局时在
    \uuuuu init\uuuu
    中。这比在
    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'
    
    好:

    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'