Python kivy 如何在 multiline=True 时使用按钮或输入键验证 TextInput?

Python kivy how to validate TextInput with button or enter key while multiline=True?

想法 是使用 Enter 键 或通过“按钮”

验证 TextInput

问题: 有没有办法在 TextInput: 中 运行 on_text_validate 使用 ButtonEnter key(这也会触发按钮)并使用 shift-enterctrl-enter?因为我需要将 TextInput 中的文本更新到我的标签,因为我无法按 Enter,因为我的 multiline=True。还有什么方法可以知道 TextInput 中是否有文本,因此当您在 TextInput 中键入内容时,“验证按钮”将被启用并突出显示。

我试着在网上搜索但只能找到2个选项,1是绑定键盘,2是设置multiline=False。我选择了option1,折腾了一整天还是没能解决问题,因为例子不多

编辑:我添加了一个示例以使我的更清楚。

.kv 文件

TextInput:
   multiline: True     # Down the line by hitting shift-enter/ctrl-enter instead of enter
   on_text_validate:   # I want to run this line by hitting enter or via a Button:
         root.on_text_validate(self)

默认情况下,当触摸在 TextInput 小部件之外时,TextInput 会失去焦点。因此,如果您通过按钮(在 TextInput 之外)触发某些操作,那么它足以处理 focus.

以外的事情

我仍然不清楚你想要发生什么。

如果您想在按下回车键或任何其他键时从键盘散焦 TextInput,您只需将键盘绑定到某个回调并从该回调执行所需的操作。

基于这个假设,你有这个(完整的)代码并做了一些额外的调整:

from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder



class TestApp(App):

    def build(self):
        Window.bind(on_keyboard = self.validate_input)
        return Builder.load_string(
"""
BoxLayout:
    orientation: "vertical"
    spacing: "5dp"
    Label:
        id: lbl
    TextInput:
        id: textfield
        hint_text: "Enter text here"
""")

    def validate_input(self, window, key, *args, **kwargs):
        textfield = self.root.ids.textfield
        if key == 13 and textfield.focus: # The exact code-key and only the desired `TextInput` instance.
#           textfield.do_undo() # Uncomment if you want to strip out the new line.
            textfield.focus = False
            self.root.ids.lbl.text = textfield.text
#           textfield.text = "" # Uncomment if you want to make the field empty.
            return True

TestApp().run()