在 TextInput 小部件中设置单个单词的样式
Posted
技术标签:
【中文标题】在 TextInput 小部件中设置单个单词的样式【英文标题】:Style single words inside TextInput widget 【发布时间】:2019-02-06 17:06:12 【问题描述】:我正在构建一个具有语言学功能的文本编辑器。
我是第一次使用 Kivy 框架,但我非常喜欢它(它是 Tkinter 和 QT 在功率生产率方面的中间地带)。我已经能够构建大部分我需要的东西,除了这个:如何在 TextInput 小部件中格式化单个单词/字母?
简单示例:编辑器具有拼写检查功能(它检查数据库中是否存在单词),如果单词不存在,我如何通过将颜色更改为红色或添加红色背景阴影来突出显示它,但仅在那个单词中,其余文本继续黑色?
对所有文本执行此操作很容易(编辑 foreground_color 属性),但从我在文档中阅读的内容来看,TextInput 小部件在处理文本时很差(我可以获得光标信息和位置,但不能t 操纵 - 例如 TKinter 在这方面更好,它允许使用个性化的隐藏标签和样式)。
有 kivy.core.text.markup 小部件,它添加了 BBCODE 功能,但仅限于标签,不能与 TextInput 集成。一个有趣的事情是 CodeInput 小部件,但它仅适用于 Pygments,用于代码语法高亮,不能用于拼写检查器中的数据库中的目标词。
有什么想法吗?
我正在考虑使用 Canvas 在文字下方绘制红色矩形,但我不知道如何获得正确的位置和大小,并且需要为此禁用 TextInput 中的背景颜色或图像。由于 CodeInput 可以突出显示代码语法,我知道这是可能的,但不知道怎么做,因为没有这样的文档。
谢谢
【问题讨论】:
【参考方案1】:由于您的应用程序能够从 TextInput 的文本中提取单词,并根据 DB 进行检查,因此您可以使用 select_text(start, end)
和 selection_color
突出显示错误的单词。
TextInput » select_text(start, end)
select_text(start, end)
选择此 TextInput 中显示的部分文本。
参数:
start
textinput.text 的索引从哪里开始选择
end
应该显示选择的 textinput.text 的索引
TextInput » selection_color
selection_color
当前选择的颜色,采用 (r, g, b, a) 格式。
警告
颜色应始终具有小于 1 的“alpha”分量,因为 选择在文本之后绘制。
selection_color 是一个 ListProperty,默认为 [0.1843, 0.6549, 0.8313, .5].
【讨论】:
感谢您的回答。我也考虑过这一点,但我认为在这种情况下它不会起作用:应用程序拼写检查是实时的,而用户输入它总是检查每个单词并在侧边框中显示语法信息。使用突出显示单词的选择,每次用户在 TextInput 上写一个新字母或用鼠标按钮单击时,都会导致选择消失。我假设 select_text 的工作方式类似于 Word 文本编辑器(例如):当有人单击或写入时,选择就会消失。如果有办法让选择永久保留,是的,它会起作用。 PS:每次输入内容时,我都可以再次运行用于选择和突出显示错误单词的代码,这样它总是可见的。但是想象一个有 100 页和十几个错误单词的文档,每次用户写一封新信时这样做一定很慢:/ 最好的方法是只做一次,并且在整个会话期间保持不变。以上是关于在 TextInput 小部件中设置单个单词的样式的主要内容,如果未能解决你的问题,请参考以下文章