Python 如何在kivy中使用input到TextInput以获得不同的输出
我编写了以下代码Python 如何在kivy中使用input到TextInput以获得不同的输出,python,kivy,Python,Kivy,我编写了以下代码 #-*- coding: utf-8 -*- from kivy.config import Config from kivy.uix.button import Button from functools import partial Config.set('graphics', 'width', 300) Config.set('graphics', 'height', 300) from kivy.lang import Builder Builder.load_str
#-*- coding: utf-8 -*-
from kivy.config import Config
from kivy.uix.button import Button
from functools import partial
Config.set('graphics', 'width', 300)
Config.set('graphics', 'height', 300)
from kivy.lang import Builder
Builder.load_string("""
<KeybindTestWidget>:
BoxLayout:
size: root.size
orientation: 'vertical'
TextInput:
id: textinput1
size_hint_y: 0.45
text: ""
on_focus: root.set_activeTextInput("textinput1")
BoxLayout:
size_hint_y: 0.1
TextInput:
id: textinput2
size_hint_y: 0.45
text: ""
on_focus: root.set_activeTextInput("textinput2")
""")
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
class KeybindTestWidget(Widget):
def __init__(self, **kwargs):
super(KeybindTestWidget, self).__init__(**kwargs)
self.bufHotKeyTextinputName = ""
#key bind
self._keyboard = Window.request_keyboard(
self._keyboard_closed, self, 'text')
if self._keyboard.widget:
pass
self._keyboard.bind(on_key_down=self._on_keyboard_down)
self._keyboard.bind(on_key_up=self._on_keyboard_up)
def _keyboard_closed(self):
pass
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
self.ids[self.bufHotKeyTextinputName].text = keycode[1]
return True
def _on_keyboard_up(self, keyboard, keycode):
return True
def set_activeTextInput(self, textInputName, *args):
self.bufHotKeyTextinputName = textInputName
class TestApp(App):
def __init__(self, **kwargs):
super(TestApp, self).__init__(**kwargs)
def build(self):
return KeybindTestWidget()
if __name__ == '__main__':
TestApp().run()
在上面的代码中,如果我在文本输入处于焦点时从键盘输入,文本将随着按键输入而改变
例如,如果我按键盘上的空格键,TextInput将显示空格键
但是,上面的代码有一个问题
这就是当我按下键盘上的a时发生的情况,如下图所示,TextInput显示aa
在键盘输入之前执行_on_keyboard _down函数,因此它会复制输入
我尝试了TextInput选项readonly,这使得on_键按下没有响应
有什么好的解决方法吗?一种方法是,在TextInput绘制完字母后,使用时钟安排通话,我们将删除该字母。 您还需要从functools导入部分 键盘上的定义、键盘、键码、文本、修改器: Clock.schedule\u oncepartialself.clear\u和\u set,键码 返回真值 def clear_和_setself,keycode,*参数: self.ids[self.bufHotKeyTextinputName].text=keycode[1]