所以我想做一个文本编辑器,但我一直卡在这部分上,我想让它更改实时输入的某个单词的颜色,例如:可以说我输入 < em> print 我希望它自动将前景色从默认的黑色更改为蓝色。我真的不知道您是否必须使用 tag_configure 来执行此操作,但是如果可以的话,请有人帮我工作,谢谢。
代码:
from tkinter import *
root = Tk()
text = Text(root)
text.grid(row=0)
def Event(event):
text.tag_configure("print", foreground="blue")
#This is a KeyBind to trigger the Function: Event
root.bind("<Return>", Event)
root.mainloop()
我已经尝试找出一个星期了, 我真的希望有人可以帮助我, 如果有人至少可以向我提供一些信息或示例 会非常感激的。
答案 0 :(得分:1)
如果您想在输入时更改文本的颜色,您需要做一些事情:
定义具有所需颜色的标签。你已经得到了:
text.tag_configure("print", foreground="blue")
哪个有效。您可能希望能够触发其他事件来更改颜色以应用于新键入的文本,否则您的编辑器将非常无聊。您可以有几个按钮,每个按钮的颜色不同,等等。您可能需要多个标签,因为如果您更改“打印”标签的配置,则已使用该标签名称标记的所有内容都将更改以匹配新配置。
所以,大致如下:
"<Key>"
连同:
root.bind("<Key>", on_key)
这应该大致给了你你想要的东西,但是当它设置好时,它仍然不会太有趣。您可以有多个标签,每个标签都配置为在视觉上不同(不同的前景色和背景色等),并根据需要将不同的标签应用于您输入的内容。
INSERT 是一个特殊的文本小部件标记,表示插入点/光标在小部件中的位置。当您键入时,INSERT 会一直向右移动,总是在您键入的内容之后。所以,“INSERT - 1c”是之前的位置,指向刚刚输入的字符。
快乐编码!
答案 1 :(得分:0)
tag_configure
仅用于配置tag
,但是您必须为文本中的单词分配tag
才能更改其颜色。
您可以使用text.tag_add(tag_name, text_start, text_end)
将标签添加到所选文本。
问题可能是如何找到单词或行的text_start
和text_end
。
Tkinter具有特殊值,例如end
,insert
,wordstart
等。
我使用不同的标签来更改最后一行和最后一个单词的颜色。它显示了不同的情况。
我使用-2c
来跳过最后一个Return
,但是在其他系统中,它仅需要-1c
。如果没有-2c
,则在将新字符放入新行时将使用颜色。
如果您在最后一个单词之后插入空格,则不会找到最后一个单词。
如果更改tag_configure
的顺序,则可能不起作用。
import tkinter as tk
# --- functions ---
def on_return(event):
# -2c (-2chars) to skip `Return`
# red color for last line
text.tag_add('red_fg', 'end-2c linestart', 'end-2c')
# blue color for last word
text.tag_add('blue_fg', 'insert-2c wordstart', 'end-2c')
# --- main ---
root = tk.Tk()
text = tk.Text(root)
text.pack()
# tag's order can be important
text.tag_configure("red_fg", foreground="red")
text.tag_configure("blue_fg", foreground="blue")
root.bind("<Return>", on_return)
root.mainloop()
effbot.org:Text indices
Tcl / Tk:Text
TkDocs:Callback at MongoDB Operation With Node.js->文本位置和索引