如何在 gtk/python 中以编程方式调用 Ubuntu 的屏幕键盘?

如何在 gtk/python 中以编程方式调用 Ubuntu 的屏幕键盘?

我正在使用 gtk python 对我的界面进行编程,并在没有物理键盘的情况下在 Udoo Neo 屏幕上显示它们。

我希望每当有字段需要填写时,键盘都会显示出来。但是,我不想使用 Tkinter 库。

有没有简单的方法可以让键盘显示在屏幕上?

答案1

在焦点位于字段上时调用板载键盘

您可以使用以下方式调用焦点进入/退出时的任何命令:

field.connect('focus-in-event', self.focus_in)

或者:

field.connect('focus-out-event', self.focus_out)

其中focus_in()focus_out()是您的功能,在获得焦点或失去焦点时调用。

一个例子

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import signal
import subprocess

class CallKeyboardTest:

    def __init__(self):
        
        # window definition
        window = Gtk.Window(title="Test 123")
        window.connect('destroy', Gtk.main_quit)
        # maingrid
        maingrid = Gtk.Grid()
        maingrid.set_border_width(12)
        window.add(maingrid)
        # two different fields, one is calling the keyboard, the other isn't
        testfield = Gtk.Entry()
        testfield.connect('focus-in-event', self.focus_in)
        testfield.connect('focus-out-event', self.focus_out)
        otherfield = Gtk.Entry()
        maingrid.attach(testfield, 0, 0, 1, 1)
        maingrid.attach(otherfield, 0, 1, 1, 1)
        window.show_all()
        Gtk.main()
        
    def focus_out(self, entry, event):
        subprocess.Popen(["pkill", "onboard"])

    def focus_in(self, entry, event):
        subprocess.Popen("onboard")

    def stop_prefs(self, *args):
        Gtk.main_quit()

if __name__ == "__main__":
    CallKeyboardTest()

在上面的例子中,如果字段“testfield”获得焦点,则会调用屏幕键盘,当焦点移出(或焦点转移到“otherfield”)时,屏幕键盘将会消失。

获得焦点后调用键盘

在此处输入图片描述

焦点移出时关闭键盘

在此处输入图片描述

笔记

板载键盘有许多选项,如布局、位置、日志学习、大小等。请参阅man onboard

相关内容