我编写了一个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?在这一点上,没有任何文件对我很清楚。
答案 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()