首页 文章

使用at-spi支持Python PyGtk虚拟键盘

提问于
浏览
0

我写了一个PyGtk应用程序来控制Pi3上的一些特定功能 . 这个全屏GUI(通过2.8“TFT触摸屏)是用户必须与设备交互的全部 . 没有鼠标,键盘,SSH,VNC等可用 . 因为需要从用户那里获得输入我需要实现一种方法,当文本框获得焦点时显示虚拟键盘,然后在焦点丢失时消失 . 我研究了许多虚拟键盘,而唯一一个似乎提供Gtk支持的功能的是佛罗伦萨 . 但是我当输入文本框获得/失去焦点时,无法自动显示/隐藏它 .

佛罗伦萨依靠at-spi框架来获取事件通知 . 根据"Florence modes"(http://florence.sourceforge.net/english/usage.html

You should make sure your applications support at-spi if you intend to use Florence in hidden mode.

The auto hide mode requires accessibility to be activated, which means the at-spi registry daemon is running and applications are using it.

此外,根据FAQ(http://florence.sourceforge.net/english/how-to.html),需要设置环境变量 .

export GTK_MODULES=gail:atk-bridge

因此我将Florence配置为自动隐藏模式,下载at-spi,运行注册表守护程序并设置环境变量但没有骰子 . 当GUI上的文本框被聚焦时,键盘不会出现 .

我想我有两个问题 . 首先,我不是以任何方式与佛罗伦萨联系在一起,所以如果有另一种解决方案,我愿意实施它 . 但其次,我不清楚的一件事是我如何让PyGtk应用程序“支持at-spi” . 除了环境变量,我如何确保我的应用程序使用at-spi?在这一点上,我没有任何文件清楚 .

1 回答

  • 0

    我还没有树莓派(RPi),所以这个答案可能不适用于RPi .

    它适用于Linux,因此您可能希望在RPi上测试它 .

    我安装了 OnBoard (另一个支持DBus的虚拟键盘) .

    确保OnBoard正在运行,但隐藏了虚拟键盘 .

    以下代码将控制虚拟键盘的可见性:

    import dbus
    
    # initialize session bus, you can put the following lines into 
    # your initialization block, or something or use a class
    sess_bus = dbus.SessionBus()
    
    # get the object proxy for the virtual keyboard, 
    # won't work if OnBoard is not already running
    kbd = sess_buss.get_object('org.onboard.Onboard', 
                               '/org/onboard/Onboard/Keyboard')
    
    
    # display virtual keyboard
    kbd.Show()
    
    # hide virtual keyboard
    kbd.Hide()
    

相关问题