Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在kivy中使用input到TextInput以获得不同的输出_Python_Kivy - Fatal编程技术网

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]