【问题标题】:Kivy Character Counter from TextInput来自 TextInput 的 Kivy 字符计数器
【发布时间】:2018-03-01 21:47:13
【问题描述】:

再次!我正在尝试向我的 TextInput 小部件添加一个字符计数器,但我不知道要为四个参数传递哪些参数,也不知道它们应该如何工作。我检查了文档,但它让我更深入了树林。无论如何,这里是相关的sn-ps。

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】:

    如果你想设置一个文本计数器,你不需要使用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()
    

    【讨论】:

    • 我能够根据我的目的完美地调整此响应。谢谢!
    猜你喜欢
    • 2014-10-23
    • 2013-09-10
    • 2016-01-15
    • 2016-05-25
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多