Python PyGtk 虚拟键盘支持 at-spi

标签 python raspberry-pi accessibility pygtk raspberry-pi3

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

Florence 依赖 at-spi 框架来获取事件通知。根据“佛罗伦萨模式”( 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.

此外,根据常见问题解答 ( http://florence.sourceforge.net/english/how-to.html ),需要设置环境变量。

export GTK_MODULES=gail:atk-bridge

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

我想我有两个问题。首先,我与佛罗伦萨没有任何关系,因此如果有其他解决方案,我愿意实现它。但其次,我不清楚的一件事是如何使 PyGtk 应用程序“支持 at-spi”。除了环境变量之外,如何确保我的应用程序使用 at-spi?在这一点上,我没有明确的文档。

最佳答案

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

关于Python PyGtk 虚拟键盘支持 at-spi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40471097/

相关文章:

python - 如何使用来自不同模型的选择字段创建自定义 Django 表单?

java - OpenCV 在 System.loadLibrary() 上因 SIGSEGV 崩溃;

html - 如何在不暂停句子的情况下覆盖屏幕阅读器对句子中单词的发音?

wordpress - 如何使用 WAVE 可访问性报告解决此标签问题?

python - 将 Python OR Tools 路由解决方案保存到列表中

python - 这两种创建数组的方式有什么区别吗?

python - 需要能够在系统时钟达到特定时间时启动Python函数

html - 我应该如何使这个带有标签的隐藏复选框可访问

如果字符串以 "ly"结尾,则将 "ing"添加到字符串结尾的 Pythonic 方法?

python - 如何裁剪最大的矩形并应用环绕变换