Киви не показывает (бенгальский) персонаж правильно?
Kivy Python не поддерживает соединение бенгальских символов. Есть ли другой способ решить эту проблему?
Кто-нибудь может описать, в чем проблема? Что я могу сделать, чтобы решить эту проблему?
Ожидаемый результат:
Программный вывод:
1 ответ
Соответствующее средство визуализации текста необходимо для правильной обработки шрифтов Bangla (и других шрифтов со сложными глифами). Средство визуализации текста pango имеет такие функции, как откат, сложная обработка глифов и многие другие функции. Kivy поддерживает средство визуализации текста панго с ограниченными функциями на данный момент. В настоящее время это протестировано в MacOS и Linux. Ниже приведена процедура, демонстрирующая установку средства визуализации текста панго с Kivy, а также пример приложения, показывающего правильную визуализацию текста бангла. Процедура предполагала, что Kivy уже установлен в Linux (Ubuntu 18.04).
Проверьте с помощью следующей команды, правильно ли уже установлен pango:
pkg-config --libs pangoft2
если панго установлен правильно, он выдаст следующий результат:
-lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype
В противном случае, если он не выводит ничего, значит, он установлен неправильно. В этом случае переходите к следующему шагу.
Выполните следующую команду и дождитесь, пока она завершит выполнение:
sudo apt-get update
Затем выполните следующую команду для установки pango:
sudo apt install libfreetype6-dev libpango1.0-dev libpangoft2-1.0-0
Снова проверьте с помощью команды на шаге 1, правильно ли выполнена установка.
После установки pango необходимо перекомпилировать Kivy. Для этого сначала выполните следующую команду:
sudo apt-get install -y \ python-pip \ build-essential \ git \ python \ python3-dev \ ffmpeg \ libsdl2-dev \ libsdl2-image-dev \ libsdl2-mixer-dev \ libsdl2-ttf-dev \ libportmidi-dev \ libswscale-dev \ libavformat-dev \ libavcodec-dev \ zlib1g-dev
Затем последовательно выполните следующие три команды:
sudo pip3 install cython export USE_PANGOFT2=1 export KIVY_TEXT=pango
Вы можете получить
Requirement already satisfied
сообщение дляCython
установка, что нормально.Теперь удалите Kivy с помощью следующей команды:
sudo python3 -m pip uninstall kivy
И установите Kivy с помощью следующей команды:
sudo pip3 install kivy
После успешной переустановки Kivy вы можете запустить следующий пример:
import os
os.environ['KIVY_TEXT'] = 'pango'
from kivy.app import App
from kivy.lang import Builder
APP_KV = """
BoxLayout:
Label:
text: "সকালে"
font_size: '48sp'
font_name: 'font/kalpurush.ttf'
"""
class MainApp(App):
def build(self):
return Builder.load_string(APP_KV)
if __name__ == '__main__':
MainApp().run()
В KIVY_TEXT
настройка среды может не понадобиться, поскольку она уже экспортирована ранее. Но это чтобы показать, как вы можете выбрать средство визуализации текста. Вам нужен файл шрифтаkalpurush.ttf
(или любой другой файл шрифта bangla unicode) в подкаталоге с именем font
.
Журнал Kivy при запуске программы выглядит следующим образом:
[INFO ] [Logger ] Record log in /home/kivy/.kivy/logs/kivy_20-08-31_9.txt
[INFO ] [Kivy ] v1.11.1
[INFO ] [Kivy ] Installed at "/usr/local/lib/python3.6/dist-packages/kivy/__init__.py"
[INFO ] [Python ] v3.6.8 (default, Oct 7 2019, 12:59:55)
[GCC 8.3.0]
[INFO ] [Python ] Interpreter at "/usr/bin/python3"
[INFO ] [Factory ] 184 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <sdl2>
[INFO ] [GL ] OpenGL version <b'3.1 Mesa 19.0.8'>
[INFO ] [GL ] OpenGL vendor <b'VMware, Inc.'>
[INFO ] [GL ] OpenGL renderer <b'llvmpipe (LLVM 8.0, 256 bits)'>
[INFO ] [GL ] OpenGL parsed version: 3, 1
[INFO ] [GL ] Shading version <b'1.40'>
[INFO ] [GL ] Texture max size <8192>
[INFO ] [GL ] Texture max units <32>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[INFO ] [Text ] Provider: pango
[INFO ] [Base ] Start application main loop
[INFO ] [GL ] NPOT texture support is available
[INFO ] [WindowSDL ] exiting mainloop and closing.
[INFO ] [Base ] Leaving application in progress...
Обратите внимание, что поставщик текста pango
.
Вывод программы:
Итак, текст отображается правильно. Вы можете проверить с любыми другими составными буквами Bangla, оно будет отображаться правильно.
Для других платформ, таких как Windows, проблема состоит в том, чтобы правильно установить pango. Возможно, это будет нетривиально, поскольку я пока не нашел простого способа. Возможно, панго нужно скомпилировать из исходников с учетом его зависимостей.
В моем предыдущем ответе я описал процедуру установки и активации
pango
текст, отображаемый на сервере в Linux. Здесь я объясню процедуру установки и активации
pango
для Kivy в среде Windows. Ниже приведена среда, в которой тестируется процедура:
- Windows 10
- Python 3.6.8 (64-разрядная)
- Киви 2.0.0rc3
Ниже приведены шаги, которые необходимо выполнить:
Создайте каталог с именем
src
в корнеC:
диск и перейдите в этот каталог:C:\>mkdir src C:\>cd src
Выполните следующую команду, чтобы клонировать
vcpkg
кsrc
каталог:git clone https://github.com/microsoft/vcpkg
Вам необходимо установить Git, чтобы выполнить указанную выше команду.
Затем начните
vcpkg
и перейти кvcpkg
каталог:C:\src>.\vcpkg\bootstrap-vcpkg.bat C:\src>cd vcpkg
Теперь выполните следующую команду для установки
pango
(с его зависимостями):vcpkg install pango --triplet x64-windows
После успешной установки
pango
, загрузите исходный tar-файл версии Kivy 2.0.0rc3 с https://pypi.org/project/Kivy/2.0.0rc3/#files и распакуйте в любую подходящую папку.Теперь перейдите в папку, в которую распакованы исходные файлы Kivy 2.0.0rc3, и откройте папку
setup.py
файл в текстовом редакторе (желательно Notepad++). Найдите строку, содержащуюif c_options['use_pangoft2'] in (None, True)
и добавьте перед этой строкой следующий блок кода и сохраните файл:if c_options['use_pangoft2'] in (None, True) and platform == 'win32': pango_flags = {} pango_flags['include_dirs'] = (['C:/src/vcpkg/installed/x64-windows/include', 'C:/src/vcpkg/installed/x64-windows/include/harfbuzz']) pango_flags['library_dirs'] = (['C:/src/vcpkg/installed/x64-windows/lib']) pango_flags['libraries'] = (['pangoft2-1.0', 'pango-1.0', 'gobject-2.0', 'glib-2.0', 'harfbuzz', 'freetype', 'fontconfig']) c_options['use_pangoft2'] = True pango_depends = {'depends': ['lib/pango/pangoft2.pxi', 'lib/pango/pangoft2.h']} sources['core/text/_text_pango.pyx'] = merge(base_flags, pango_flags, pango_depends) import subprocess subprocess.call(["setx", "FONTCONFIG_FILE", "C:\\src\\vcpkg\\installed\\x64-windows\\tools\\fontconfig\\fonts.conf"])
Эта ручная конфигурация требуется как
vcpkg
в настоящее время не производит.pc
файлы для автоматического заполнения переменных компоновки компилятора черезpkg-conifg
. Также на данный момент нетpkg-config
интеграция инструмента сvcpkg
.Добавить
C:/src/vcpkg/installed/x64-windows/lib
иC:/src/vcpkg/installed/x64-windows/bin
кPATH
системная переменная среды.Теперь Kivy нужно скомпилировать из исходников. Если Kivy уже установлен, сначала удалите его. Затем можно выполнить процедуру, описанную на официальном сайте kivy, хотя я перечисляю здесь необходимые шаги, которые необходимо выполнить. Обновите пип и колесо с помощью:
python -m pip install --upgrade pip wheel setuptools
Получите Visual C++ Build Tools и установите следующие компоненты из раздела "Visual C++ build tools": "Windows 10 SDK (версия)", "Инструменты C++ CMake для Windows", "Поддержка C++/CLI", "MSVC v142 - VS 2019. Инструменты сборки C++ x64/x86 ".
Задайте необходимые переменные среды:
set USE_SDL2=1 set USE_PANGOFT2=1 set USE_GSTREAMER=1
Установите последние версии зависимостей kivy:
python -m pip install Cython==0.29.10 docutils pygments pypiwin32 kivy_deps.sdl2 kivy_deps.glew kivy_deps.gstreamer kivy_deps.glew_dev kivy_deps.sdl2_dev kivy_deps.gstreamer_dev
Теперь перейдите в корневую папку, куда извлекаются исходные файлы Kivy 2.0.0rc3 (где находится файл setup.py), и выполните следующую команду для компиляции и установки Kivy:
python -m pip install .
После успешной установки Kivy вы можете запустить следующий пример:
import os os.environ['KIVY_TEXT'] = 'pango' from kivy.app import App from kivy.lang import Builder APP_KV = """ BoxLayout: Label: text: "অল্প বিস্তর" font_size: '48sp' font_name: 'font/kalpurush.ttf' """ class MainApp(App): def build(self): return Builder.load_string(APP_KV) if __name__ == '__main__': MainApp().run()
Вам нужен файл шрифта
kalpurush.ttf
(или любой другой файл шрифта bangla unicode) в подкаталоге с именемfont
.Журнал Kivy при запуске программы выглядит следующим образом:
[INFO ] [Logger ] Record log in C:\Users\user\.kivy\logs\kivy_20-09-06_12.txt [INFO ] [deps ] Successfully imported "kivy_deps.gstreamer_dev" 0.2.0 [INFO ] [deps ] Successfully imported "kivy_deps.gstreamer" 0.2.0 [INFO ] [deps ] Successfully imported "kivy_deps.glew" 0.2.0 [INFO ] [deps ] Successfully imported "kivy_deps.glew_dev" 0.2.0 [INFO ] [deps ] Successfully imported "kivy_deps.sdl2" 0.2.0 [INFO ] [deps ] Successfully imported "kivy_deps.sdl2_dev" 0.2.0 [INFO ] [Kivy ] v2.0.0rc3, git-Unknown, 20200906 [INFO ] [Kivy ] Installed at "C:\Python\Python36\lib\site-packages\kivy\__init__.py" [INFO ] [Python ] v3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] [INFO ] [Python ] Interpreter at "C:\Python\Python36\python.exe" [INFO ] [Factory ] 185 symbols loaded [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2 (img_pil, img_ffpyplayer, img_gif ignored) [INFO ] [Window ] Provider: sdl2 [INFO ] [GL ] Using the "OpenGL" graphics system [INFO ] [GL ] GLEW initialization succeeded [INFO ] [GL ] Backend used <glew> [INFO ] [GL ] OpenGL version <b'4.6.0 - Build 26.20.100.7812'> [INFO ] [GL ] OpenGL vendor <b'Intel'> [INFO ] [GL ] OpenGL renderer <b'Intel(R) HD Graphics 520'> [INFO ] [GL ] OpenGL parsed version: 4, 6 [INFO ] [GL ] Shading version <b'4.60 - Build 26.20.100.7812'> [INFO ] [GL ] Texture max size <16384> [INFO ] [GL ] Texture max units <32> [INFO ] [Window ] auto add sdl2 input provider [INFO ] [Window ] virtual keyboard not allowed, single mode, not docked [INFO ] [Text ] Provider: pango [INFO ] [Base ] Start application main loop [INFO ] [GL ] NPOT texture support is available
Обратите внимание, что поставщик текста
pango
.Текст отображается правильно. С участием
pango
Для других шрифтов, отличных от английского, требующих возврата шрифта, сложная обработка глифов будет отображаться правильно.Есть и другие процедуры установки
pango
, как сgvsbuild
скрипты, упомянутые на официальном сайте GTK. Он имеетpkg-config
интеграция. Но он не интегрируется успешно с Kivy. Установка черезvcpkg
, как описано в этой процедуре, является единственной успешной процедурой, которую я нашел.