Python 在Android中,kivy请求击键后如何隐藏软键盘?

Python 在Android中,kivy请求击键后如何隐藏软键盘?,python,android,python-3.x,kivy,hide,Python,Android,Python 3.x,Kivy,Hide,我使用kivy网站示例为Android创建了一个监听击键字符串的应用程序。它工作得很好,但当我将它与扫描仪和天平一起使用时,弹出的软键盘就变得不必要了。 我尝试了所有不同的配置设置,也下载了应用程序空键盘。 更新: 有趣的是,一旦键盘被移除,应用程序就不再接受输入。为什么会这样 代码: def\u获取键盘(self): self.\u键盘=Window.request\u键盘( self.\u键盘\u关闭,self,“文本”) 如果是self.\u keyboard.widget: #如果它存在

我使用kivy网站示例为Android创建了一个监听击键字符串的应用程序。它工作得很好,但当我将它与扫描仪和天平一起使用时,弹出的软键盘就变得不必要了。

我尝试了所有不同的配置设置,也下载了应用程序空键盘。

更新: 有趣的是,一旦键盘被移除,应用程序就不再接受输入。为什么会这样

代码:
def\u获取键盘(self):
self.\u键盘=Window.request\u键盘(
self.\u键盘\u关闭,self,“文本”)
如果是self.\u keyboard.widget:
#如果它存在,这个小部件是一个VKeyboard对象,您可以使用它
#更改键盘布局。
通过
self.\u keyboard.bind(按键盘上下=按键盘上下)
def_键盘_关闭(自身):
如果是自己的话。_键盘!=无:
self.\u keyboard.unbind(按键盘上下=self.\u键盘上下)
键盘上下定义(self、键盘、键码、文本、修改器):
#键码由一个整数+一个字符串组成
#如果我们点击escape,释放键盘
如果keycode[1]=“escape”:
键盘释放()
elif(keycode[1]=“shift”或keycode[1]=“rshift”)和文本!=无和键码[0]!=44和键码[0]!=46:
self.is_shift=True
elif self.is_shift and(键码[1]!=“shift”或键码[1]!=“rshift”):
打印(键码[1])
self.is_shift=False
如果键码[0]==46:
self.key_input=self.key_input+str(chr(62)).upper()
如果键码[0]==44:
self.key_input=self.key_input+str(chr(60)).upper()
如果键码[0]==92:
self.key_input=self.key_input+str(chr(124)).upper()
elif(键码[0]>47和键码[0]<58)或(键码[0]>96或键码[0]<123)和键码[1]!='输入'\
还有文字!=无和键码[1]!='shift'和keycode[1]!='rshift'和not self.is_shift和keycode[0]!=44和键码[0]!=46和键码[0]!=301:
self.key_input=self.key_input+str(text).upper()
elif keycode[1]=“输入”:
plyer.notification.notify(title=“Capture Data”,message=str(the_key),app_name=self.the.name,
超时=2,
ticker='newincomingnotification',toast=True)
如果self.scrn_name==“firstscanpage”:
如果self.ids.emp\u first\u scan\u key.text==“”:
self.scan\u weight\u ticker()
self.ids.emp\u first\u scan\u key.text=self.key\u输入
self.i=0
如何在请求按键时禁用或隐藏软键盘,而不删除按键侦听器? 每次击键后将键盘绑定到不同的小部件会有帮助吗

解决它:
空键盘应用程序确实解决了这个问题。在设置中激活空键盘后,必须按“空格键”并选择它。没有更多的软键盘!当然,这不是最好的解决方案。

不要使用请求键盘,只需绑定到
窗口。按向下键
等。@谢谢您提供的信息。我尝试了以下
self.\u键盘。按一下键(key=self.on\u key\u down)
其中
self。按一下键
是一个接受
参数的函数。此外,我还尝试了
self.\u keyboard=Window
,然后绑定到回调
self.\u keyboard.bind(on\u key\u down=self.\u on\u keyboard\u down)
,但对于许多位置参数,我得到了一个
类型错误。另外,
self.\u keyboard=Window.on\u key\u down(self.on\u key\u down)
没有给出任何结果。您能详细说明一下如何绑定
窗口。按一下
?使用
窗口。绑定(按一下=一些功能)
。听起来您至少有一次尝试是正确的,只是您绑定了一个函数,该函数的参数数量不正确。使用类似于
def func(*args,**kwargs)的方法:
接受任何参数,然后期望这些参数看到您收到的内容。@sarment非常感谢。最后只需要
*args
。而
*args
给出了一个包含4个元素的
。元素是[0]:
,它有许多有趣的属性和方法;[1] :
这是ascii表格的十进制数;[2] :
不确定数字代表什么,因为我认为它是ascii的十六进制,但它与ascii表格的十六进制列不匹配;[3] :
是字符串形式的键盘值。再次感谢您。@您建议的绑定方法是正确的。没有软键盘,应用程序读取击键。谢谢如果你把你的bind方法作为答案,我会这样做。
    def _get_the_keyboard(self):
        self._keyboard = Window.request_keyboard(
            self._keyboard_closed, self, 'text')
        if self._keyboard.widget:
            # If it exists, this widget is a VKeyboard object which you can use
            # to change the keyboard layout.
            pass
        self._keyboard.bind(on_key_down=self._on_keyboard_down)

    def _keyboard_closed(self):
        if self._keyboard != None:
            self._keyboard.unbind(on_key_down=self._on_keyboard_down)

    def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
         # Keycode is composed of an integer + a string
        # If we hit escape, release the keyboard
        if keycode[1] == 'escape':
            keyboard.release()
        elif (keycode[1] == 'shift' or keycode[1] == 'rshift') and text != None and keycode[0] != 44 and keycode[0] != 46:
            self.is_shift = True
        elif self.is_shift and (keycode[1] != 'shift' or keycode[1] != 'rshift'):
            print(keycode[1])
            self.is_shift = False
            if keycode[0] == 46:
                self.key_input = self.key_input + str(chr(62)).upper()
            if keycode[0] == 44:
                self.key_input = self.key_input + str(chr(60)).upper()
            if keycode[0] == 92:
                self.key_input = self.key_input + str(chr(124)).upper()
        elif (keycode[0] > 47 and keycode[0] < 58) or (keycode[0] > 96 or keycode[0] < 123) and keycode[1] != 'enter'\
                and text != None and keycode[1] != 'shift' and keycode[1] != 'rshift' and not self.is_shift and keycode[0] != 44 and keycode[0] != 46 and keycode[0] != 301:
            self.key_input = self.key_input + str(text).upper()
        elif keycode[1] == 'enter':
            plyer.notification.notify(title="Capture Data", message=str(the_key), app_name=self.the.name,
                                              timeout=2,
                                              ticker='New Incoming Notification', toast=True)
            if self.scrn_name == 'firstscanpage':
                if self.ids.emp_first_scan_key.text == "":
                    self.scan_weight_ticker()
                    self.ids.emp_first_scan_key.text = self.key_input
                    self.i = 0