Стиль отдельных слов внутри виджета TextInput - PullRequest
0 голосов
/ 31 августа 2018

Я создаю текстовый редактор с лингвистическими функциями.

Я впервые использую инфраструктуру Kivy, но мне она очень нравится (это среднее между Tkinter и QT по соотношению мощности и производительности). Мне удалось построить большую часть того, что мне уже нужно, кроме этого: как я могу отформатировать отдельные слова / буквы в виджете TextInput?

Простой пример: редактор имеет возможности проверки орфографии (он проверяет, существует ли слово в БД), как выделить слово, если оно не существует, изменив цвет на красный или добавив тень на красном фоне , но только в этом единственном слове остальная часть текста остается черной?

Это легко сделать со всем текстом (редактирование свойства foreground_color), но из того, что я прочитал в документации, виджет TextInput плох, когда дело доходит до манипулирования текстом (я могу получить информацию и позицию курсора, но могу ' • манипулировать - TKinter, например, лучше в этом, он позволяет использовать персонализированные скрытые теги и стили).

Существует виджет kivy.core.text.markup, который добавляет функциональность BBCODE, но только к меткам, не может интегрироваться с TextInput. Интересным является виджет CodeInput, но он работает только с Pygments, для подсветки синтаксиса кода не может использовать его для целевых слов в БД при проверке орфографии.

Есть идеи?

Я думал о рисовании красных прямоугольников под словами с помощью Canvas, но я не знаю, как получить правильную позицию и размер, и для этого мне нужно было бы отключить цвета фона или изображения в TextInput. Поскольку CodeInput может подсвечивать синтаксис кода, я знаю, что это возможно, но не знаю, как, поскольку для такой вещи нет документации.

Спасибо

1 Ответ

0 голосов
/ 31 августа 2018

Поскольку ваше приложение может извлечь слово из текста TextInput и сравнить его с БД, вы можете использовать select_text(start, end) и selection_color, чтобы выделить слово по ошибке.

TextInput »select_text (начало, конец)

select_text(start, end)

Выберите часть текста, отображаемую в этом TextInput.

Параметры:

start

Индекс textinput.text, с которого начинается выбор

end

Индекс textinput.text, до которого должен отображаться выбор

TextInput »selection_color

selection_color

Текущий цвет выделения в формате (r, g, b, a).

Внимание

Цвет должен всегда иметь альфа-компонент меньше 1, так как выбор делается после текста.

selection_color является ListProperty и по умолчанию [0.1843, 0.6549, 0,8313, .5].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...