Getting fcitx to work in a Python Qt application with virtualenv
I am currently developing a simple Qt application with Python for myself to learn foreign languages. When I wanted to add support for Japanese, I recognized that while I have no problems with Anki and other Qt applications, Japanese input did not work in my own application.
I normally use fcitx5, but then switched to fcitx, because I first
suspected Qt6 being the problem and there’s a dedicated package fcitx-qt6
. It
still did not work. Next, I tried several different libraries thinking that
maybe it’s a problem with the Python library. PySide6 (Qt6), PySide2 (Qt5) and
PyQt5 (Qt5), none of them worked.
When you know the solution, it’s really simple though: The Python libraries
(at least when installed from PyPI) do not ship with the
required plugin for fcitx.
On my system Qt, there is the file
/usr/lib/qt6/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin-qt6.so
,
but listing the virtualenv folder gives:
$ ls -l venv/lib/python3.10/site-packages/PySide6/Qt/plugins/platforminputcontexts/
total 208
-rwxr-xr-x 1 brati users 27712 Mar 19 11:42 libcomposeplatforminputcontextplugin.so
-rwxr-xr-x 1 brati users 162240 Mar 19 11:42 libibusplatforminputcontextplugin.so
-rwxr-xr-x 1 brati users 19080 Mar 19 11:42 libqtvirtualkeyboardplugin.so
Copying the file from the system Qt6 into the virtualenv Qt6 solved the issue!
cp /usr/lib/qt6/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin-qt6.so \
venv/lib/python3.10/site-packages/PySide6/Qt/plugins/platforminputcontexts/