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

时间:2016-11-07 17:30:54

标签: python raspberry-pi accessibility pygtk raspberry-pi3

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

佛罗伦萨依靠at-spi框架来获取事件通知。根据"佛罗伦萨模式" (BASS_MusicLoad

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/usage.html),需要设置环境变量。

export GTK_MODULES=gail:atk-bridge

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

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

1 个答案:

答案 0 :(得分:1)

我还没有树莓派(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()