web-dev-qa-db-ja.com

gtk / pythonでUbuntuのオンスクリーンキーボードをプログラムで呼び出すにはどうすればよいですか?

Gtk pythonを使用してインターフェイスをプログラミングし、物理キーボードなしでUdoo Neo画面に表示しています。

フィールドに入力するたびにキーボードが表示されるようにします。しかし、私はTkinterライブラリを使いたくありません。

画面にキーボードを配置する簡単な方法はありますか?

4
Arwa Moath

フィールドのフォーカスでオンボードキーボードを呼び出す

以下を使用して、フォーカスイン/アウトのコマンドを呼び出すことができます。

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 __== "__main__":
    CallKeyboardTest()

上記の例では、フィールド "testfield"がフォーカスされ、フォーカスアウト(または "otherfield"にフォーカス)されると、オンスクリーンキーボードが消えます。

フォーカスでキーボードを呼び出します

enter image description here

フォーカスアウト時にキーボードを閉じる

enter image description here

注意

オンボードキーボードには、レイアウト、位置、ログ学習、サイズなどの多くのオプションがあります。man onboardを参照してください

4
Jacob Vlijm