TextInput中的Kivy字符计数器

时间:2018-03-01 21:47:13

标签: python kivy textinput

又来了!我正在尝试为我的TextInput小部件添加一个字符计数器,但我不知道要为这四个参数传递什么参数,或者更多关于它们应该如何运行的参数。我检查了文档,但它让我更进了树林。无论如何,这里是相关的片段。

def charsLeft(window, keycode, text, modifiers):
     # Do some magic, pass some parameters, and then...
     ansLen.text = str(len(hidden.text) - len(answer.text))

这是我布局的代码:

ansLen = Label(bold=True, halign="center", size_hint=(.2, .5), text_size=self.size, valign="middle")
answer = TextInput(id="sbt", multiline=False, size_hint=(.8, .5), text="")
answer.bind(keyboard_on_key_down=charsLeft)

我认为,因为几乎每个网站都有,所以它应该相当简单。我只是不知道我不知道在这里。

1 个答案:

答案 0 :(得分:0)

如果你想设置一个文本计数器,你不需要使用keyboard_on_key_down,你只需要为我们使用bind捕获文本更改,然后我们可以使用lambda函数来更新自绑定返回实例和属性更改后的值,设置我们使用的值setattr

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout


class MyApp(App):
    def build(self):
        layout = BoxLayout(orientation='vertical')
        answer = TextInput(multiline=False, text="", size_hint=(1, 0.5))
        ansLen = Label(bold=True, halign="center", text="", size_hint=(1, 0.5))

        answer.bind(text=lambda instance, text: setattr(ansLen, "text", str(len(text))))
        layout.add_widget(answer)
        layout.add_widget(ansLen)
        return layout


if __name__ == '__main__':
    MyApp().run()