Поддержка виртуальной клавиатуры Python PyGtk с at-spi

Я написал приложение PyGtk для управления некоторыми конкретными функциями на Pi3. Этот полноэкранный графический интерфейс (через 2.8 » TFT сенсорный экран) — это все, что пользователь должен взаимодействовать с устройством. Нет мыши, клавиатуры, SSH, VNC и т.д. Поскольку существует требование для получения ввода от пользователя, мне нужно реализовать способ, чтобы виртуальная клавиатура появлялась, когда текстовое поле получает фокус, а затем исчезала, когда фокус теряется. Я исследовал ряд виртуальных клавиатур, и единственная, которая, кажется, предлагает эту функциональность с поддержкой Gtk, — Флоренция. Но я не могу заставить его автоматически показывать/скрывать, когда входное текстовое поле получает / теряет фокус.

Флоренция полагается на платформу at-spi для получения уведомлений о событиях. Согласно «Florence modes» ( 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.

Также, согласно FAQ ( http://florence.sourceforge.net/english/how-to.html ) необходимо установить переменную среды.

export GTK_MODULES=gail:atk-bridge

Поэтому я настроил Florence для режима автоматического скрытия, загрузил at-spi, запустил демон реестра и установил переменную среды, но не dice. Когда текстовое поле на GUI сфокусировано, клавиатура не появляется.

Полагаю, у меня есть два вопроса. Во-первых, я никоим образом не связан с Флоренцией, поэтому, если есть другое решение, я открыт для его реализации. Но во-вторых, одна вещь, которая мне не ясна, это то, как я могу сделать приложение PyGtk «поддержка at-spi.»Кроме переменной среды как я могу убедиться, что мое приложение использует at-spi? Ни одна из документов не ясна мне по этому вопросу.

1 ответ

  1. У меня еще нет raspberry pi (RPi), поэтому этот ответ может не работать на RPi.

    Он работает в linux, поэтому вы можете протестировать его на RPi.

    Я установил OnBoard(другая виртуальная клавиатура, которая поддерживает DBus).

    Убедитесь, что вы работаете на борту, но со скрытой виртуальной клавиатурой.

    Следующий код будет управлять видимостью виртуальной клавиатуры:

    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()