python - 在 Tkinter 文本中设置标签 - 尽管有进一步的变化,标签的范围始终从 1.1 开始
问题描述
在我的 Tkinter GUI 中,我尝试创建一个功能,用户可以在其中逐字重写条目小部件中的给定文本。文字的颜色应根据文字是否正确书写而改变。问题是我创建的标签范围总是以 1.1 开头,即使我将开头设置为每个单词中第一个字母的位置。“例如,文本中的第二个单词从字符串中的第 10 位开始,在我使用空格键两次之后:text.tag_ranges(tag_name)
返回(<string object: '1.1'>, <string object: '1.15'>)
,但是当我print(start)
得到我期望的结果时:1.10
”。结果是着色总是从文本的开头开始,而不是单词的开头。结局总是好的。有什么我看不到的地方吗?
import tkinter as tk
import re
t = "quae ab illo inventore veritatis et quasi"
text_split = t.split()
last_char = len(t)
whitespaces_list = [0] + [i.start() for i in re.finditer(" ", t)] + [last_char]
window = tk.Tk()
window.geometry('750x600')
n = 0
def next_word(event):
global n
n = n + 1
z = text_split[n - 1]
correct_word = re.search(z, entry.get())
if n < len(whitespaces_list):
start = '1.' + str(whitespaces_list[n - 1])
end = '1.' + str(whitespaces_list[n])
for x in range(len(text_split) - 1):
text.tag_add(str(x), start, end)
# print(text.tag_ranges(str(x)))
# print(start)
# print(end)
if correct_word:
text.tag_config(str(x), foreground="green")
else:
text.tag_config(str(x), foreground="red")
entry.delete(0, tk.END)
label1 = tk.Label(width=200, height=10)
label1.pack()
text = tk.Text(label1)
text.place(x=40, y=20)
text.insert(tk.INSERT, t)
label2 = tk.Label(height=80, width=200)
label2.pack()
entry = tk.Entry(label2)
entry.place(x=300, y=20)
window.bind("<space>", next_word)
window.mainloop()
解决方案
最后我找到了一个非常简单的解决方案,我错误地设置了循环,它应该被删除并且正确的代码部分是:
if n < len(whitespaces_list):
start = '1.' + str(whitespaces_list[n - 1])
end = '1.' + str(whitespaces_list[n])
text.tag_add(str(n), start, end)
if correct_word:
text.tag_config(str(n), foreground="green")
else:
text.tag_config(str(n), foreground="red")
感谢 Derek 和 Matiiss 的回复。
推荐阅读
- javascript - 如何根据javascript中的输入值更改背景框
- php - Laravel 中的外键约束格式不正确
- flutter - Flutter StreamProvider 使用了一个`BuildContext`,它是提供者的祖先
- python-3.x - 在 mac os 上 pip3 安装失败
- python-3.x - sqlite3变量替换不起作用python3
- php - 如何使用数组写入文本文件?
- javascript - '。' 在 exec() 中使用时不被识别为内部或外部命令,但从命令行运行时不被识别
- asp.net-core - 在生产中尝试通过 .net core 3.X 中的相对路径读取文件时出错
- javascript - 如何将已编辑的 .html 页面从 iFrame 保存到 ASP.NET Core 中的服务器?
- csv - 将带有标题的 csv 读入 Octave 中的数据结构