我目前正在开发一个程序,用不同颜色的表达式中的不同类别进行着色。我正在附加一些图像,因为很难用单词来解释它。
我确实看过How to highlight text in a tkinter Text widget,但我找不到与标签优先级相关的任何内容。
图片1:使用特殊样式文件从乳胶代码生成的PDF屏幕截图
如您所见,有一个绿色矩形,包含一个蓝色矩形,(蓝色矩形)包含一个红色矩形。
当我尝试使用我编写的程序重新创建它 - 这基本上类似于文本编辑器,我得到以下(分2步):
图片2
我将蓝色标签添加到' BLUE'然后是一个红色标签,以“红色蓝色”' - 到目前为止,标签的优先级正在发挥作用。但当我尝试将绿色标签添加到“绿色红色蓝色”时。我得到以下内容:
图片3
因此标签的优先级会变得混乱。如果我尝试做蓝色标签,用红色标签包裹,用蓝色标签包裹,也会发生同样的情况:
图片4
我用来添加标签的功能是:
def blueTerm(self,word):
global blue
global red
global green
self.txt.tag_add("blue", "sel.first", "sel.last")
self.txt.tag_config('blue', background='deep sky blue', foreground='white')
self.txt.tag_raise("red")
self.txt.tag_raise("green")
def redSet(self,word):
global blue
global red
global green
self.txt.tag_add("red", "sel.first", "sel.last")
self.txt.tag_config('red', background='red', foreground='black')
self.txt.tag_raise("blue")
self.txt.tag_raise("green")
def greenExp(self,word):
self.txt.tag_add("green", "sel.first", "sel.last")
self.txt.tag_config('green', background='green', foreground='black')
self.txt.tag_raise("blue")
self.txt.tag_raise("red")
我的问题是 - 有什么我可以做的优先事项'标签,以便我可以获得与图像1相同的结果?
注意:即使我的功能工作并添加标签,我收到一条错误消息:
TclError:tag" red"没有在文本小部件中定义。
显然,这些全局变量绿色,红色和蓝色都不起作用。
答案 0 :(得分:1)
您收到错误的原因是因为您在创建红色标记之前尝试提升“红色”标记。它与全局变量red
(以及green
和blue
无关,这些变量似乎完全无用)。
因为你得到了这个错误,所以优先级没有设置为你认为的优先级,因此,你会得到你所做的视觉外观。
除非每次应用标记时都有不断重新配置标记的原因,否则简单的解决方案是在首次创建文本窗口小部件时以适当的优先级顺序配置它们。
self.txt = tk.Text(...)
self.txt.tag_config('green', background='green', foreground='black')
self.txt.tag_config('red', background='red', foreground='black')
self.txt.tag_config('blue', background='deep sky blue', foreground='white')
稍后,您只需要将标记添加到文本中,而无需配置标记并兼顾优先级:
def blueTerm(self,word):
self.txt.tag_add("blue", "sel.first", "sel.last")
def redSet(self,word):
self.txt.tag_add("red", "sel.first", "sel.last")
def greenExp(self,word):
self.txt.tag_add("green", "sel.first", "sel.last")