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 使用 Button 或 Enter key(这也会触发按钮)并使用 shift-enter 或 ctrl-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()
想法 是使用 Enter 键 或通过“按钮”
验证 TextInput问题: 有没有办法在 TextInput: 中 运行 on_text_validate 使用 Button 或 Enter key(这也会触发按钮)并使用 shift-enter 或 ctrl-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()