如何使用Kivy检测操作系统/外围设备?

4
我正在使用Kivy编写程序。
在“桌面”操作系统下,使用键盘输入是很正常的,我的代码也是这样做的。
最初的回答:我正在使用Kivy编写程序。
在“桌面”操作系统下,使用键盘输入是很正常的,我的代码也是这样做的。
class ProgLayout( FloatLayout ):
    def __init__(self, **kwargs):
        super( ProgLayout, self ).__init__(**kwargs)
        # Keyboard Handling (if any)
        self.keyboard = Window.request_keyboard(self.keyboard_closed, self)
        self.keyboard.bind(on_key_down=self.on_keyboard_down)
        self.keyboard.bind(on_key_up=self.on_keyboard_up)
        self.key_states = { 'up':False, 'down':False, 'left':False, 'right':False }

    def on_keyboard_down( self, keyboard, keycode, text, modifiers ):
        #print("ON_KEYBOARD_DOWN")
        #print('The key', keycode, 'have been pressed')
        #print(' - text is %r' % text)
        #print(' - modifiers are %r' % modifiers)

        junk, key = keycode
        keymap = { 'up':Directions.NORTH, 'down':Directions.SOUTH, 'left':Directions.WEST, 'right':Directions.EAST }
        if ( key in ( 'up', 'down', 'left', 'right' ) ):
            self.key_states[ key ] = True
            self.handleKeys()

    def on_keyboard_up( self, keyboard, keycode ):
        #print("ON_KEYBOARD_UP")
        junk, key = keycode
        if ( key in ( 'up', 'down', 'left', 'right' ) ):
            self.key_states[ key ] = False
            self.handleKeys()

然而,在Android下启动应用程序(我怀疑)会导致屏幕键盘出现。显然,软键盘可以被关闭,但更好的解决方案是仅在存在硬件键盘时打开键盘 - 或者在Android上不自动使用它。

有没有办法确定Kivy上是否存在物理键盘?

有没有办法确定我的应用程序正在Android上运行(啊,我猜测是使用platform.system()sys.platform)。

编辑:如果我在buildozer.spec清单中包含sysplatform,则buildozer无法构建.APK。尽管如此,导入sys似乎仍然有效。但在我的Android平板电脑上,sys.platform报告为“Linux”,因此这不是一种前进的方式。

2
尝试使用 from kivy.utils import platform - Erik
应该有一种方法可以防止屏幕键盘自动打开,但我不知道是否实际上存在这样的方法。如果没有的话,那就是Kivy的一个错误。 - inclement
2个回答

7

正如评论者@Erik所指出的,确定当前平台的解决方案是kivy.utils.platform

from kivy.utils import platform

...

if ( kivy.utils.platform != 'android' ):
    # open the keyboard, since we're not android

根据文档所述:

一个字符串,用于标识当前操作系统。它可以是以下之一:'win'、'linux'、'android'、'macosx'、'ios'或'unknown'。


2

对于平台方面,只需要:

import kivy

print(kivy.platform)

关于虚拟键盘,Kivy框架中有VKeyboard模块,但我无法理解这个类应该具有的任何属性... 这很奇怪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接