TextInput中的Kivy字符计数器

问题描述 投票:0回答:1

再次!我正在尝试为我的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)

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

python kivy textinput
1个回答
0
投票

如果你想设置一个文本计数器,你不需要使用keyboard_on_key_down,你只需要为它们捕获文本更改我们使用bind,然后我们可以使用lambda函数来更新值,因为bind返回实例和属性更改,设置我们使用的值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()
© www.soinside.com 2019 - 2024. All rights reserved.