tjo*_*son 5 virtual-keyboard raspbian
我正在使用PyGObject创建一个UI,它将在连接到运行Raspbian的Pi 3的7"官方RPi触摸屏上运行.作为此界面的一部分,UI将需要一个屏幕键盘.我知道两个虚拟键盘Pi的程序:火柴盒键盘和佛罗伦萨.
问题是我想尽可能地模仿智能手机键盘的行为,但不知道该怎么做.我想要做的是类似于此,除了我希望键盘自动隐藏并位于主窗口的顶部.如何才能做到这一点?
编辑:我已经尝试了这两个程序,但无法弄清楚如何实现这一目标.我在Matchbox键盘中找不到自动弹出选项,有些人报告它具有此功能(此处),其他人说不(这里).我假设一些Linux桌面管理器支持这个功能,但不支持Pi上的LXDE.
佛罗伦萨似乎很有前途,因为它有一个自动隐藏选项听起来像我想要的那样,但是当我选择它时似乎没有用.
我终于弄清楚如何向火柴盒键盘添加自动隐藏行为。首先,我在这里--daemon读到了有关命令行参数的信息,这听起来好像它可以工作,但是当我尝试它时,自动隐藏功能仅适用于某些而不是所有文本条目。
同一个自述文件说:
您可以使用支持 XEMBED 协议(例如 GTK2)的工具包将火柴盒键盘嵌入到其他应用程序中。
请参阅example/matchbox-keyboard-gtk-embed.c了解其完成方式。
我之前就知道这一点,但认为它不能与 PyGObject 一起使用,直到我发现它可以。将这些行添加到我的代码中有效:
p = subprocess.Popen(["matchbox-keyboard", "--xid"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
keyboard = Gtk.Socket()
window.add(keyboard)
keyboard.add_id(int(p.stdout.readline()))
Run Code Online (Sandbox Code Playgroud)
我还创建了一个简单的子类,Gtk.Entry当文本输入获得或失去焦点时,该子类会自动隐藏键盘:
class TextEntry(Gtk.Entry):
def __init__(self, window):
Gtk.Entry.__init__(self)
self.keyboard = window.keyboard
self.connect("focus-in-event", self.on_focus_in)
self.connect("focus-out-event", self.on_focus_out)
def on_focus_in(self, event, data):
self.keyboard.show()
def on_focus_out(self, event, data):
self.keyboard.hide()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10024 次 |
| 最近记录: |