私は現在、主要なイベントをプラットフォーム間で文字/名前として検出および解釈できるようにするための python プロジェクトに取り組んでいます。X11 のサポートを提供するために python-xlib を使用していますが、最近、キー イベントのキーコードを適切なキーシムに変換するプロセスで問題が発生しました。
私のコードのスナップショットはこちら: https://gist.github.com/SavinaRoja/7306962
問題は、特に PyKeyboardEvent クラスの使用で発生します。このクラスでは、キー イベントのイベント データを取得できますが、それらのキーコードをキーシムに解釈することはできません。Xlib.display の keycode_to_keysym 関数が適切に動作しません。
X11 について読んで、xev ユーティリティのソース コードで確認したところ、使用する適切な Xlib 関数は XLookupString のようです。この関数を使用して C (学習し始めたばかりの言語) でコーディングするのは簡単ですが、現在、python から関数を使用することに関して困惑しています。私は 2 つの選択肢を検討しました。python-xlib のプロトコルを利用および拡張して XLookupString を呼び出すか、ctypes を使用して XLookupString を呼び出すかです。私のコードには後者の試みが含まれています(機能していませんが、現在の場所を示しています):
from ctypes import *
XLookupString = cdll.LoadLibrary('libX11.so').XLookupString
char_buffer = create_string_buffer(257)
keysym = c_int() # the important value
count = XLookupString(byref(event), # TypeError, not a ctypes instance
byref(char_buffer),
len(char_buffer),
keysym,
None)
私が欠けているのは、イベントクラスを python-xlib から XLookupString の適切な C 構造体に変換する機能、または X サーバーから受信したデータを解釈する機能 (python-xlib がイベントインスタンスに解析する) であると思われます。そのような構造体に。この疑いは正しいですか?もしそうなら、どのツールを学ぶ必要がありますか?
この時点で、Python と C の間のインターフェースに関する多くの基本的な情報とスキルが不足している可能性があるため、一般教育でこのギャップを修正することに時間を費やしています。誰かが私の問題について具体的に洞察している場合、または関連するトピックについて研究をどのように行うべきかについての洞察を持っている場合は、ぜひ聞いてください.